@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":"easBuildHooks.js","sourceRoot":"","sources":["../../../src/js/tools/easBuildHooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * EAS Build Hooks for Sentry\n *\n * This module provides utilities for capturing EAS build lifecycle events\n * and sending them to Sentry. It supports the following EAS npm hooks:\n * - eas-build-on-error: Captures build failures\n * - eas-build-on-success: Captures successful builds (optional)\n * - eas-build-on-complete: Captures build completion with metrics\n *\n * @see https://docs.expo.dev/build-reference/npm-hooks/\n */\n\n/* eslint-disable no-console */\n\nimport type { DsnComponents } from '@sentry/core';\nimport { dsnToString, makeDsn, uuid4 } from '@sentry/core';\nimport { SDK_VERSION } from '../version';\n\nconst SENTRY_DSN_ENV = 'SENTRY_DSN';\nconst EAS_BUILD_ENV = 'EAS_BUILD';\n\n/**\n * Environment variables provided by EAS Build.\n * @see https://docs.expo.dev/build-reference/variables/\n */\nexport interface EASBuildEnv {\n EAS_BUILD?: string;\n EAS_BUILD_ID?: string;\n EAS_BUILD_PLATFORM?: string;\n EAS_BUILD_PROFILE?: string;\n EAS_BUILD_PROJECT_ID?: string;\n EAS_BUILD_GIT_COMMIT_HASH?: string;\n EAS_BUILD_RUN_FROM_CI?: string;\n EAS_BUILD_STATUS?: string;\n EAS_BUILD_APP_VERSION?: string;\n EAS_BUILD_APP_BUILD_VERSION?: string;\n EAS_BUILD_USERNAME?: string;\n EAS_BUILD_WORKINGDIR?: string;\n}\n\n/** Options for configuring EAS build hook behavior. */\nexport interface EASBuildHookOptions {\n dsn?: string;\n tags?: Record<string, string>;\n captureSuccessfulBuilds?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\ninterface SentryEvent {\n event_id: string;\n timestamp: number;\n platform: string;\n level: 'error' | 'info' | 'warning';\n logger: string;\n environment: string;\n release?: string;\n tags: Record<string, string>;\n contexts: Record<string, Record<string, unknown>>;\n message?: { formatted: string };\n exception?: {\n values: Array<{ type: string; value: string; mechanism: { type: string; handled: boolean } }>;\n };\n fingerprint?: string[];\n sdk: { name: string; version: string };\n}\n\n/** Checks if the current environment is an EAS Build. */\nexport function isEASBuild(): boolean {\n return process.env[EAS_BUILD_ENV] === 'true';\n}\n\n/** Gets the EAS build environment variables. */\nexport function getEASBuildEnv(): EASBuildEnv {\n return {\n EAS_BUILD: process.env.EAS_BUILD,\n EAS_BUILD_ID: process.env.EAS_BUILD_ID,\n EAS_BUILD_PLATFORM: process.env.EAS_BUILD_PLATFORM,\n EAS_BUILD_PROFILE: process.env.EAS_BUILD_PROFILE,\n EAS_BUILD_PROJECT_ID: process.env.EAS_BUILD_PROJECT_ID,\n EAS_BUILD_GIT_COMMIT_HASH: process.env.EAS_BUILD_GIT_COMMIT_HASH,\n EAS_BUILD_RUN_FROM_CI: process.env.EAS_BUILD_RUN_FROM_CI,\n EAS_BUILD_STATUS: process.env.EAS_BUILD_STATUS,\n EAS_BUILD_APP_VERSION: process.env.EAS_BUILD_APP_VERSION,\n EAS_BUILD_APP_BUILD_VERSION: process.env.EAS_BUILD_APP_BUILD_VERSION,\n EAS_BUILD_USERNAME: process.env.EAS_BUILD_USERNAME,\n EAS_BUILD_WORKINGDIR: process.env.EAS_BUILD_WORKINGDIR,\n };\n}\n\nfunction getEnvelopeEndpoint(dsn: DsnComponents): string {\n const { protocol, host, port, path, projectId, publicKey } = dsn;\n const portStr = port ? `:${port}` : '';\n const pathStr = path ? `/${path}` : '';\n return `${protocol}://${host}${portStr}${pathStr}/api/${projectId}/envelope/?sentry_key=${publicKey}&sentry_version=7`;\n}\n\nfunction createEASBuildTags(env: EASBuildEnv): Record<string, string> {\n const tags: Record<string, string> = {};\n if (env.EAS_BUILD_PLATFORM) tags['eas.platform'] = env.EAS_BUILD_PLATFORM;\n if (env.EAS_BUILD_PROFILE) tags['eas.profile'] = env.EAS_BUILD_PROFILE;\n if (env.EAS_BUILD_ID) tags['eas.build_id'] = env.EAS_BUILD_ID;\n if (env.EAS_BUILD_PROJECT_ID) tags['eas.project_id'] = env.EAS_BUILD_PROJECT_ID;\n if (env.EAS_BUILD_RUN_FROM_CI) tags['eas.from_ci'] = env.EAS_BUILD_RUN_FROM_CI;\n if (env.EAS_BUILD_STATUS) tags['eas.status'] = env.EAS_BUILD_STATUS;\n if (env.EAS_BUILD_USERNAME) tags['eas.username'] = env.EAS_BUILD_USERNAME;\n return tags;\n}\n\nfunction createEASBuildContext(env: EASBuildEnv): Record<string, unknown> {\n return {\n build_id: env.EAS_BUILD_ID,\n platform: env.EAS_BUILD_PLATFORM,\n profile: env.EAS_BUILD_PROFILE,\n project_id: env.EAS_BUILD_PROJECT_ID,\n git_commit: env.EAS_BUILD_GIT_COMMIT_HASH,\n from_ci: env.EAS_BUILD_RUN_FROM_CI === 'true',\n status: env.EAS_BUILD_STATUS,\n app_version: env.EAS_BUILD_APP_VERSION,\n build_version: env.EAS_BUILD_APP_BUILD_VERSION,\n username: env.EAS_BUILD_USERNAME,\n working_dir: env.EAS_BUILD_WORKINGDIR,\n };\n}\n\nfunction createEnvelope(event: SentryEvent, dsn: DsnComponents): string {\n const envelopeHeaders = JSON.stringify({\n event_id: event.event_id,\n sent_at: new Date().toISOString(),\n dsn: dsnToString(dsn),\n sdk: event.sdk,\n });\n const itemHeaders = JSON.stringify({ type: 'event', content_type: 'application/json' });\n const itemPayload = JSON.stringify(event);\n return `${envelopeHeaders}\\n${itemHeaders}\\n${itemPayload}`;\n}\n\nasync function sendEvent(event: SentryEvent, dsn: DsnComponents): Promise<boolean> {\n const endpoint = getEnvelopeEndpoint(dsn);\n const envelope = createEnvelope(event, dsn);\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-sentry-envelope' },\n body: envelope,\n });\n if (response.status >= 200 && response.status < 300) return true;\n console.warn(`[Sentry] Failed to send event: HTTP ${response.status}`);\n return false;\n } catch (error) {\n console.error('[Sentry] Failed to send event:', error);\n return false;\n }\n}\n\nfunction getReleaseFromEASEnv(env: EASBuildEnv): string | undefined {\n // Honour explicit override first\n if (process.env.SENTRY_RELEASE) {\n return process.env.SENTRY_RELEASE;\n }\n // Best approximation without bundle identifier: version+buildNumber\n if (env.EAS_BUILD_APP_VERSION && env.EAS_BUILD_APP_BUILD_VERSION) {\n return `${env.EAS_BUILD_APP_VERSION}+${env.EAS_BUILD_APP_BUILD_VERSION}`;\n }\n return env.EAS_BUILD_APP_VERSION;\n}\n\nfunction createBaseEvent(\n level: 'error' | 'info' | 'warning',\n env: EASBuildEnv,\n customTags?: Record<string, string>,\n): SentryEvent {\n return {\n event_id: uuid4(),\n timestamp: Date.now() / 1000,\n platform: 'node',\n level,\n logger: 'eas-build-hook',\n environment: 'eas-build',\n release: getReleaseFromEASEnv(env),\n tags: { ...createEASBuildTags(env), ...customTags },\n contexts: { eas_build: createEASBuildContext(env), runtime: { name: 'node', version: process.version } },\n sdk: { name: 'sentry.javascript.react-native.eas-build-hooks', version: SDK_VERSION },\n };\n}\n\n/** Captures an EAS build error event. Call this from the eas-build-on-error hook. */\nexport async function captureEASBuildError(options: EASBuildHookOptions = {}): Promise<void> {\n const dsnString = options.dsn ?? process.env[SENTRY_DSN_ENV];\n if (!dsnString) {\n console.warn('[Sentry] No DSN provided. Set SENTRY_DSN environment variable or pass dsn option.');\n return;\n }\n if (!isEASBuild()) {\n console.warn('[Sentry] Not running in EAS Build environment. Skipping error capture.');\n return;\n }\n const dsn = makeDsn(dsnString);\n if (!dsn) {\n console.error('[Sentry] Invalid DSN format.');\n return;\n }\n const env = getEASBuildEnv();\n const errorMessage =\n options.errorMessage ??\n `EAS Build Failed: ${env.EAS_BUILD_PLATFORM ?? 'unknown'} (${env.EAS_BUILD_PROFILE ?? 'unknown'})`;\n const event = createBaseEvent('error', env, { ...options.tags, 'eas.hook': 'on-error' });\n event.exception = {\n values: [{ type: 'EASBuildError', value: errorMessage, mechanism: { type: 'eas-build-hook', handled: true } }],\n };\n event.fingerprint = ['eas-build-error', env.EAS_BUILD_PLATFORM ?? 'unknown', env.EAS_BUILD_PROFILE ?? 'unknown'];\n const success = await sendEvent(event, dsn);\n if (success) console.log('[Sentry] Build error captured.');\n}\n\n/** Captures an EAS build success event. Call this from the eas-build-on-success hook. */\nexport async function captureEASBuildSuccess(options: EASBuildHookOptions = {}): Promise<void> {\n if (!options.captureSuccessfulBuilds) {\n console.log('[Sentry] Skipping successful build capture (captureSuccessfulBuilds is false).');\n return;\n }\n const dsnString = options.dsn ?? process.env[SENTRY_DSN_ENV];\n if (!dsnString) {\n console.warn('[Sentry] No DSN provided. Set SENTRY_DSN environment variable or pass dsn option.');\n return;\n }\n if (!isEASBuild()) {\n console.warn('[Sentry] Not running in EAS Build environment. Skipping success capture.');\n return;\n }\n const dsn = makeDsn(dsnString);\n if (!dsn) {\n console.error('[Sentry] Invalid DSN format.');\n return;\n }\n const env = getEASBuildEnv();\n const successMessage =\n options.successMessage ??\n `EAS Build Succeeded: ${env.EAS_BUILD_PLATFORM ?? 'unknown'} (${env.EAS_BUILD_PROFILE ?? 'unknown'})`;\n const event = createBaseEvent('info', env, { ...options.tags, 'eas.hook': 'on-success' });\n event.message = { formatted: successMessage };\n event.fingerprint = ['eas-build-success', env.EAS_BUILD_PLATFORM ?? 'unknown', env.EAS_BUILD_PROFILE ?? 'unknown'];\n const success = await sendEvent(event, dsn);\n if (success) console.log('[Sentry] Build success captured.');\n}\n\n/** Captures an EAS build completion event with status. Call this from the eas-build-on-complete hook. */\nexport async function captureEASBuildComplete(options: EASBuildHookOptions = {}): Promise<void> {\n const env = getEASBuildEnv();\n const status = env.EAS_BUILD_STATUS;\n if (status === 'errored') {\n await captureEASBuildError(options);\n return;\n }\n if (status === 'finished' && options.captureSuccessfulBuilds) {\n await captureEASBuildSuccess({ ...options, captureSuccessfulBuilds: true });\n return;\n }\n console.log(`[Sentry] Build completed with status: ${status ?? 'unknown'}. No event captured.`);\n}\n"]}
1
+ {"version":3,"file":"easBuildHooks.js","sourceRoot":"","sources":["../../../src/js/tools/easBuildHooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * EAS Build Hooks for Sentry\n *\n * This module provides utilities for capturing EAS build lifecycle events\n * and sending them to Sentry. It supports the following EAS npm hooks:\n * - eas-build-on-error: Captures build failures\n * - eas-build-on-success: Captures successful builds (optional)\n * - eas-build-on-complete: Captures build completion with metrics\n *\n * @see https://docs.expo.dev/build-reference/npm-hooks/\n */\n\n/* oxlint-disable eslint(no-console) */\n\nimport type { DsnComponents } from '@sentry/core';\n\nimport { dsnToString, makeDsn, uuid4 } from '@sentry/core';\n\nimport { SDK_VERSION } from '../version';\n\nconst SENTRY_DSN_ENV = 'SENTRY_DSN';\nconst EAS_BUILD_ENV = 'EAS_BUILD';\n\n/**\n * Environment variables provided by EAS Build.\n * @see https://docs.expo.dev/build-reference/variables/\n */\nexport interface EASBuildEnv {\n EAS_BUILD?: string;\n EAS_BUILD_ID?: string;\n EAS_BUILD_PLATFORM?: string;\n EAS_BUILD_PROFILE?: string;\n EAS_BUILD_PROJECT_ID?: string;\n EAS_BUILD_GIT_COMMIT_HASH?: string;\n EAS_BUILD_RUN_FROM_CI?: string;\n EAS_BUILD_STATUS?: string;\n EAS_BUILD_APP_VERSION?: string;\n EAS_BUILD_APP_BUILD_VERSION?: string;\n EAS_BUILD_USERNAME?: string;\n EAS_BUILD_WORKINGDIR?: string;\n}\n\n/** Options for configuring EAS build hook behavior. */\nexport interface EASBuildHookOptions {\n dsn?: string;\n tags?: Record<string, string>;\n captureSuccessfulBuilds?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\ninterface SentryEvent {\n event_id: string;\n timestamp: number;\n platform: string;\n level: 'error' | 'info' | 'warning';\n logger: string;\n environment: string;\n release?: string;\n tags: Record<string, string>;\n contexts: Record<string, Record<string, unknown>>;\n message?: { formatted: string };\n exception?: {\n values: Array<{ type: string; value: string; mechanism: { type: string; handled: boolean } }>;\n };\n fingerprint?: string[];\n sdk: { name: string; version: string };\n}\n\n/** Checks if the current environment is an EAS Build. */\nexport function isEASBuild(): boolean {\n return process.env[EAS_BUILD_ENV] === 'true';\n}\n\n/** Gets the EAS build environment variables. */\nexport function getEASBuildEnv(): EASBuildEnv {\n return {\n EAS_BUILD: process.env.EAS_BUILD,\n EAS_BUILD_ID: process.env.EAS_BUILD_ID,\n EAS_BUILD_PLATFORM: process.env.EAS_BUILD_PLATFORM,\n EAS_BUILD_PROFILE: process.env.EAS_BUILD_PROFILE,\n EAS_BUILD_PROJECT_ID: process.env.EAS_BUILD_PROJECT_ID,\n EAS_BUILD_GIT_COMMIT_HASH: process.env.EAS_BUILD_GIT_COMMIT_HASH,\n EAS_BUILD_RUN_FROM_CI: process.env.EAS_BUILD_RUN_FROM_CI,\n EAS_BUILD_STATUS: process.env.EAS_BUILD_STATUS,\n EAS_BUILD_APP_VERSION: process.env.EAS_BUILD_APP_VERSION,\n EAS_BUILD_APP_BUILD_VERSION: process.env.EAS_BUILD_APP_BUILD_VERSION,\n EAS_BUILD_USERNAME: process.env.EAS_BUILD_USERNAME,\n EAS_BUILD_WORKINGDIR: process.env.EAS_BUILD_WORKINGDIR,\n };\n}\n\nfunction getEnvelopeEndpoint(dsn: DsnComponents): string {\n const { protocol, host, port, path, projectId, publicKey } = dsn;\n const portStr = port ? `:${port}` : '';\n const pathStr = path ? `/${path}` : '';\n return `${protocol}://${host}${portStr}${pathStr}/api/${projectId}/envelope/?sentry_key=${publicKey}&sentry_version=7`;\n}\n\nfunction createEASBuildTags(env: EASBuildEnv): Record<string, string> {\n const tags: Record<string, string> = {};\n if (env.EAS_BUILD_PLATFORM) tags['eas.platform'] = env.EAS_BUILD_PLATFORM;\n if (env.EAS_BUILD_PROFILE) tags['eas.profile'] = env.EAS_BUILD_PROFILE;\n if (env.EAS_BUILD_ID) tags['eas.build_id'] = env.EAS_BUILD_ID;\n if (env.EAS_BUILD_PROJECT_ID) tags['eas.project_id'] = env.EAS_BUILD_PROJECT_ID;\n if (env.EAS_BUILD_RUN_FROM_CI) tags['eas.from_ci'] = env.EAS_BUILD_RUN_FROM_CI;\n if (env.EAS_BUILD_STATUS) tags['eas.status'] = env.EAS_BUILD_STATUS;\n if (env.EAS_BUILD_USERNAME) tags['eas.username'] = env.EAS_BUILD_USERNAME;\n return tags;\n}\n\nfunction createEASBuildContext(env: EASBuildEnv): Record<string, unknown> {\n return {\n build_id: env.EAS_BUILD_ID,\n platform: env.EAS_BUILD_PLATFORM,\n profile: env.EAS_BUILD_PROFILE,\n project_id: env.EAS_BUILD_PROJECT_ID,\n git_commit: env.EAS_BUILD_GIT_COMMIT_HASH,\n from_ci: env.EAS_BUILD_RUN_FROM_CI === 'true',\n status: env.EAS_BUILD_STATUS,\n app_version: env.EAS_BUILD_APP_VERSION,\n build_version: env.EAS_BUILD_APP_BUILD_VERSION,\n username: env.EAS_BUILD_USERNAME,\n working_dir: env.EAS_BUILD_WORKINGDIR,\n };\n}\n\nfunction createEnvelope(event: SentryEvent, dsn: DsnComponents): string {\n const envelopeHeaders = JSON.stringify({\n event_id: event.event_id,\n sent_at: new Date().toISOString(),\n dsn: dsnToString(dsn),\n sdk: event.sdk,\n });\n const itemHeaders = JSON.stringify({ type: 'event', content_type: 'application/json' });\n const itemPayload = JSON.stringify(event);\n return `${envelopeHeaders}\\n${itemHeaders}\\n${itemPayload}`;\n}\n\nasync function sendEvent(event: SentryEvent, dsn: DsnComponents): Promise<boolean> {\n const endpoint = getEnvelopeEndpoint(dsn);\n const envelope = createEnvelope(event, dsn);\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-sentry-envelope' },\n body: envelope,\n });\n if (response.status >= 200 && response.status < 300) return true;\n console.warn(`[Sentry] Failed to send event: HTTP ${response.status}`);\n return false;\n } catch (error) {\n console.error('[Sentry] Failed to send event:', error);\n return false;\n }\n}\n\nfunction getReleaseFromEASEnv(env: EASBuildEnv): string | undefined {\n // Honour explicit override first\n if (process.env.SENTRY_RELEASE) {\n return process.env.SENTRY_RELEASE;\n }\n // Best approximation without bundle identifier: version+buildNumber\n if (env.EAS_BUILD_APP_VERSION && env.EAS_BUILD_APP_BUILD_VERSION) {\n return `${env.EAS_BUILD_APP_VERSION}+${env.EAS_BUILD_APP_BUILD_VERSION}`;\n }\n return env.EAS_BUILD_APP_VERSION;\n}\n\nfunction createBaseEvent(\n level: 'error' | 'info' | 'warning',\n env: EASBuildEnv,\n customTags?: Record<string, string>,\n): SentryEvent {\n return {\n event_id: uuid4(),\n timestamp: Date.now() / 1000,\n platform: 'node',\n level,\n logger: 'eas-build-hook',\n environment: 'eas-build',\n release: getReleaseFromEASEnv(env),\n tags: { ...createEASBuildTags(env), ...customTags },\n contexts: { eas_build: createEASBuildContext(env), runtime: { name: 'node', version: process.version } },\n sdk: { name: 'sentry.javascript.react-native.eas-build-hooks', version: SDK_VERSION },\n };\n}\n\n/** Captures an EAS build error event. Call this from the eas-build-on-error hook. */\nexport async function captureEASBuildError(options: EASBuildHookOptions = {}): Promise<void> {\n const dsnString = options.dsn ?? process.env[SENTRY_DSN_ENV];\n if (!dsnString) {\n console.warn('[Sentry] No DSN provided. Set SENTRY_DSN environment variable or pass dsn option.');\n return;\n }\n if (!isEASBuild()) {\n console.warn('[Sentry] Not running in EAS Build environment. Skipping error capture.');\n return;\n }\n const dsn = makeDsn(dsnString);\n if (!dsn) {\n console.error('[Sentry] Invalid DSN format.');\n return;\n }\n const env = getEASBuildEnv();\n const errorMessage =\n options.errorMessage ??\n `EAS Build Failed: ${env.EAS_BUILD_PLATFORM ?? 'unknown'} (${env.EAS_BUILD_PROFILE ?? 'unknown'})`;\n const event = createBaseEvent('error', env, { ...options.tags, 'eas.hook': 'on-error' });\n event.exception = {\n values: [{ type: 'EASBuildError', value: errorMessage, mechanism: { type: 'eas-build-hook', handled: true } }],\n };\n event.fingerprint = ['eas-build-error', env.EAS_BUILD_PLATFORM ?? 'unknown', env.EAS_BUILD_PROFILE ?? 'unknown'];\n const success = await sendEvent(event, dsn);\n if (success) console.log('[Sentry] Build error captured.');\n}\n\n/** Captures an EAS build success event. Call this from the eas-build-on-success hook. */\nexport async function captureEASBuildSuccess(options: EASBuildHookOptions = {}): Promise<void> {\n if (!options.captureSuccessfulBuilds) {\n console.log('[Sentry] Skipping successful build capture (captureSuccessfulBuilds is false).');\n return;\n }\n const dsnString = options.dsn ?? process.env[SENTRY_DSN_ENV];\n if (!dsnString) {\n console.warn('[Sentry] No DSN provided. Set SENTRY_DSN environment variable or pass dsn option.');\n return;\n }\n if (!isEASBuild()) {\n console.warn('[Sentry] Not running in EAS Build environment. Skipping success capture.');\n return;\n }\n const dsn = makeDsn(dsnString);\n if (!dsn) {\n console.error('[Sentry] Invalid DSN format.');\n return;\n }\n const env = getEASBuildEnv();\n const successMessage =\n options.successMessage ??\n `EAS Build Succeeded: ${env.EAS_BUILD_PLATFORM ?? 'unknown'} (${env.EAS_BUILD_PROFILE ?? 'unknown'})`;\n const event = createBaseEvent('info', env, { ...options.tags, 'eas.hook': 'on-success' });\n event.message = { formatted: successMessage };\n event.fingerprint = ['eas-build-success', env.EAS_BUILD_PLATFORM ?? 'unknown', env.EAS_BUILD_PROFILE ?? 'unknown'];\n const success = await sendEvent(event, dsn);\n if (success) console.log('[Sentry] Build success captured.');\n}\n\n/** Captures an EAS build completion event with status. Call this from the eas-build-on-complete hook. */\nexport async function captureEASBuildComplete(options: EASBuildHookOptions = {}): Promise<void> {\n const env = getEASBuildEnv();\n const status = env.EAS_BUILD_STATUS;\n if (status === 'errored') {\n await captureEASBuildError(options);\n return;\n }\n if (status === 'finished' && options.captureSuccessfulBuilds) {\n await captureEASBuildSuccess({ ...options, captureSuccessfulBuilds: true });\n return;\n }\n console.log(`[Sentry] Build completed with status: ${status ?? 'unknown'}. No event captured.`);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metroMiddleware.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK7D;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,UAgC1C,CAAC;AA2CF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,UAAU,KAAG,UAWpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY,KAAG,YAY3D,CAAC"}
1
+ {"version":3,"file":"metroMiddleware.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ7D;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,UAgC1C,CAAC;AA2CF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,UAAU,KAAG,UAWpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY,KAAG,YAY3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"metroMiddleware.js","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StackFrame } from '@sentry/core';\nimport { addContextToFrame, debug } from '@sentry/core';\nimport { readFile } from 'fs';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport type { InputConfigT, Middleware } from 'metro-config';\nimport { promisify } from 'util';\n\nconst readFileAsync = promisify(readFile);\n\n/**\n * Accepts Sentry formatted stack frames and\n * adds source context to the in app frames.\n */\nexport const stackFramesContextMiddleware: Middleware = async (\n request: IncomingMessage,\n response: ServerResponse,\n _next: () => void,\n): Promise<void> => {\n debug.log('[@sentry/react-native/metro] Received request for stack frames context.');\n request.setEncoding('utf8');\n const rawBody = await getRawBody(request);\n\n let body: {\n stack?: Partial<StackFrame>[];\n } = {};\n try {\n body = JSON.parse(rawBody);\n } catch (e) {\n debug.log('[@sentry/react-native/metro] Could not parse request body.', e);\n badRequest(response, 'Invalid request body. Expected a JSON object.');\n return;\n }\n\n const stack = body.stack;\n if (!Array.isArray(stack)) {\n debug.log('[@sentry/react-native/metro] Invalid stack frames.', stack);\n badRequest(response, 'Invalid stack frames. Expected an array.');\n return;\n }\n\n const stackWithSourceContext = await Promise.all(stack.map(addSourceContext));\n response.setHeader('Content-Type', 'application/json');\n response.statusCode = 200;\n response.end(JSON.stringify({ stack: stackWithSourceContext }));\n debug.log('[@sentry/react-native/metro] Sent stack frames context.');\n};\n\nasync function addSourceContext(frame: StackFrame): Promise<StackFrame> {\n if (!frame.in_app) {\n return frame;\n }\n\n try {\n if (typeof frame.filename !== 'string') {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame without filename.');\n return frame;\n }\n\n const source = await readFileAsync(frame.filename, { encoding: 'utf8' });\n const lines = source.split('\\n');\n addContextToFrame(lines, frame);\n } catch (error) {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame.', error);\n }\n return frame;\n}\n\nfunction badRequest(response: ServerResponse, message: string): void {\n response.statusCode = 400;\n response.end(message);\n}\n\nfunction getRawBody(request: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = '';\n request.on('data', chunk => {\n data += chunk;\n });\n request.on('end', () => {\n resolve(data);\n });\n request.on('error', reject);\n });\n}\n\nconst SENTRY_MIDDLEWARE_PATH = '/__sentry';\nconst SENTRY_CONTEXT_REQUEST_PATH = `${SENTRY_MIDDLEWARE_PATH}/context`;\n\n/**\n * Creates a middleware that adds source context to the Sentry formatted stack frames.\n */\nexport const createSentryMetroMiddleware = (middleware: Middleware): Middleware => {\n return (request: IncomingMessage, response: ServerResponse, next: () => void) => {\n if (request.url?.startsWith(SENTRY_CONTEXT_REQUEST_PATH)) {\n return stackFramesContextMiddleware(request, response, next);\n }\n return (middleware as (req: IncomingMessage, res: ServerResponse, next: () => void) => void)(\n request,\n response,\n next,\n );\n };\n};\n\n/**\n * Adds the Sentry middleware to the Metro server config.\n */\nexport const withSentryMiddleware = (config: InputConfigT): InputConfigT => {\n if (!config.server) {\n // @ts-expect-error server is typed read only\n config.server = {};\n }\n\n const originalEnhanceMiddleware = config.server.enhanceMiddleware;\n config.server.enhanceMiddleware = (middleware, server) => {\n const sentryMiddleware = createSentryMetroMiddleware(middleware);\n return originalEnhanceMiddleware ? originalEnhanceMiddleware(sentryMiddleware, server) : sentryMiddleware;\n };\n return config;\n};\n"]}
1
+ {"version":3,"file":"metroMiddleware.js","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StackFrame } from '@sentry/core';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport type { InputConfigT, Middleware } from 'metro-config';\n\nimport { addContextToFrame, debug } from '@sentry/core';\nimport { readFile } from 'fs';\nimport { promisify } from 'util';\n\nconst readFileAsync = promisify(readFile);\n\n/**\n * Accepts Sentry formatted stack frames and\n * adds source context to the in app frames.\n */\nexport const stackFramesContextMiddleware: Middleware = async (\n request: IncomingMessage,\n response: ServerResponse,\n _next: () => void,\n): Promise<void> => {\n debug.log('[@sentry/react-native/metro] Received request for stack frames context.');\n request.setEncoding('utf8');\n const rawBody = await getRawBody(request);\n\n let body: {\n stack?: Partial<StackFrame>[];\n } = {};\n try {\n body = JSON.parse(rawBody);\n } catch (e) {\n debug.log('[@sentry/react-native/metro] Could not parse request body.', e);\n badRequest(response, 'Invalid request body. Expected a JSON object.');\n return;\n }\n\n const stack = body.stack;\n if (!Array.isArray(stack)) {\n debug.log('[@sentry/react-native/metro] Invalid stack frames.', stack);\n badRequest(response, 'Invalid stack frames. Expected an array.');\n return;\n }\n\n const stackWithSourceContext = await Promise.all(stack.map(addSourceContext));\n response.setHeader('Content-Type', 'application/json');\n response.statusCode = 200;\n response.end(JSON.stringify({ stack: stackWithSourceContext }));\n debug.log('[@sentry/react-native/metro] Sent stack frames context.');\n};\n\nasync function addSourceContext(frame: StackFrame): Promise<StackFrame> {\n if (!frame.in_app) {\n return frame;\n }\n\n try {\n if (typeof frame.filename !== 'string') {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame without filename.');\n return frame;\n }\n\n const source = await readFileAsync(frame.filename, { encoding: 'utf8' });\n const lines = source.split('\\n');\n addContextToFrame(lines, frame);\n } catch (error) {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame.', error);\n }\n return frame;\n}\n\nfunction badRequest(response: ServerResponse, message: string): void {\n response.statusCode = 400;\n response.end(message);\n}\n\nfunction getRawBody(request: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = '';\n request.on('data', chunk => {\n data += chunk;\n });\n request.on('end', () => {\n resolve(data);\n });\n request.on('error', reject);\n });\n}\n\nconst SENTRY_MIDDLEWARE_PATH = '/__sentry';\nconst SENTRY_CONTEXT_REQUEST_PATH = `${SENTRY_MIDDLEWARE_PATH}/context`;\n\n/**\n * Creates a middleware that adds source context to the Sentry formatted stack frames.\n */\nexport const createSentryMetroMiddleware = (middleware: Middleware): Middleware => {\n return (request: IncomingMessage, response: ServerResponse, next: () => void) => {\n if (request.url?.startsWith(SENTRY_CONTEXT_REQUEST_PATH)) {\n return stackFramesContextMiddleware(request, response, next);\n }\n return (middleware as (req: IncomingMessage, res: ServerResponse, next: () => void) => void)(\n request,\n response,\n next,\n );\n };\n};\n\n/**\n * Adds the Sentry middleware to the Metro server config.\n */\nexport const withSentryMiddleware = (config: InputConfigT): InputConfigT => {\n if (!config.server) {\n // @ts-expect-error server is typed read only\n config.server = {};\n }\n\n const originalEnhanceMiddleware = config.server.enhanceMiddleware;\n config.server.enhanceMiddleware = (middleware, server) => {\n const sentryMiddleware = createSentryMetroMiddleware(middleware);\n return originalEnhanceMiddleware ? originalEnhanceMiddleware(sentryMiddleware, server) : sentryMiddleware;\n };\n return config;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metroconfig.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAsC,MAAM,OAAO,CAAC;AAc7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,cAAc,yBAAyB,CAAC;AAIxC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,uBAAuB,CAAC,EACpB,OAAO,GACP;QACE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IACN;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvG;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,EACE,uBAA+B,EAC/B,gBAAuB,EACvB,gCAAuC,EACvC,WAAkB,GACnB,GAAE,wBAA6B,GAC/B,WAAW,CAsBb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAoB,GAAG,uBAAuB,GAAG,wBAA6B,GACtF,WAAW,CAgCb;AAsBD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,IAAI,GAAG;IAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D,WAAW,CA8Bb;AA0BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CA+C1G;AAgBD;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CA4CpF;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAiC1E"}
1
+ {"version":3,"file":"metroconfig.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAsC,MAAM,OAAO,CAAC;AAQ7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAYrE,cAAc,yBAAyB,CAAC;AAIxC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,uBAAuB,CAAC,EACpB,OAAO,GACP;QACE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IACN;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvG;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,EACE,uBAA+B,EAC/B,gBAAuB,EACvB,gCAAuC,EACvC,WAAkB,GACnB,GAAE,wBAA6B,GAC/B,WAAW,CAsBb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAoB,GAAG,uBAAuB,GAAG,wBAA6B,GACtF,WAAW,CAgCb;AAqBD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,IAAI,GAAG;IAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D,WAAW,CA8Bb;AA0BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CA+C1G;AAgBD;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CA4CpF;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAiC1E"}
@@ -87,7 +87,6 @@ function getSentryExpoConfig(projectRoot, options = {}) {
87
87
  }
88
88
  function loadExpoMetroConfigModule() {
89
89
  try {
90
- // eslint-disable-next-line @typescript-eslint/no-var-requires
91
90
  return require('expo/metro-config');
92
91
  }
93
92
  catch (e) {
@@ -103,9 +102,9 @@ function withSentryBabelTransformer(config, annotateReactComponents) {
103
102
  core_1.debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);
104
103
  if (!defaultBabelTransformerPath) {
105
104
  // This has to be console.warn because the options is enabled but won't be used
106
- // eslint-disable-next-line no-console
105
+ // oxlint-disable-next-line eslint(no-console)
107
106
  console.warn('`transformer.babelTransformerPath` is undefined.');
108
- // eslint-disable-next-line no-console
107
+ // oxlint-disable-next-line eslint(no-console)
109
108
  console.warn('Sentry Babel transformer cannot be used. Not adding it...');
110
109
  return config;
111
110
  }
@@ -145,7 +144,7 @@ function withSentryResolver(config, includeWebReplay) {
145
144
  }
146
145
  // Prior 0.68, resolve context.resolveRequest is sentryResolver itself, where on later version it is the default resolver.
147
146
  if (context.resolveRequest === sentryResolverRequest) {
148
- // eslint-disable-next-line no-console
147
+ // oxlint-disable-next-line eslint(no-console)
149
148
  console.error(`Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.
150
149
  Please follow one of the following options:
151
150
  - Include your resolverRequest on your metroconfig.
@@ -190,7 +189,7 @@ function withSentryExcludeServerOnlyResolver(config) {
190
189
  }
191
190
  // Prior 0.68, context.resolveRequest is sentryServerOnlyResolverRequest itself, which would cause infinite recursion.
192
191
  if (context.resolveRequest === sentryServerOnlyResolverRequest) {
193
- // eslint-disable-next-line no-console
192
+ // oxlint-disable-next-line eslint(no-console)
194
193
  console.error(`Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.
195
194
  Please include your resolverRequest on your metroconfig or update your Metro version to 0.68 or higher.
196
195
  If you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`);
@@ -1 +1 @@
1
- {"version":3,"file":"metroconfig.js","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAwEA,4CA8BC;AAKD,kDAmCC;AAyBD,gEAiCC;AA6BD,gDA+CC;AAmBD,kFA4CC;AAWD,8DAiCC;AA/XD,uCAAqC;AAGrC,mCAAmC;AACnC,qCAA8B;AAC9B,iDAA8C;AAC9C,uDAAyD;AACzD,+EAGuC;AACvC,mEAAqH;AACrH,uEAAsE;AACtE,mEAAyE;AAIzE,0DAAwC;AAExC,IAAA,2BAAY,GAAE,CAAC;AA+Cf;;;;;GAKG;AACH,SAAgB,gBAAgB,CAC9B,MAAmB,EACnB,EACE,uBAAuB,GAAG,KAAK,EAC/B,gBAAgB,GAAG,IAAI,EACvB,gCAAgC,GAAG,IAAI,EACvC,WAAW,GAAG,IAAI,MACU,EAAE;IAEhC,8BAA8B,EAAE,CAAC;IAEjC,IAAI,SAAS,GAAG,MAAM,CAAC;IAEvB,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzC,SAAS,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,uBAAuB,EAAE,CAAC;QAC5B,SAAS,GAAG,0BAA0B,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,gBAAgB,KAAK,KAAK,EAAE,CAAC;QAC/B,SAAS,GAAG,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IACD,SAAS,GAAG,mCAAmC,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,gCAAgC,EAAE,CAAC;QACrC,SAAS,GAAG,IAAA,sCAAoB,EAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,SAAS,GAAG,IAAA,mDAAyB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,UAAqF,EAAE;;IAEvF,8BAA8B,EAAE,CAAC;IAEjC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,EAAE,CAAC,gBAAgB,CAAC;IAClG,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,kCACtC,OAAO,KACV,wCAAwC,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,wCAAwC,IAAI,EAAE,CAAC;YAC3D,GAAG,CAAC,CAAA,MAAA,OAAO,CAAC,mBAAmB,mCAAI,IAAI,EAAC,CAAC,CAAC,CAAC,IAAA,sDAA8B,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,qEAA6C;SAC9C,IACD,CAAC;IAEH,IAAI,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;QACpC,SAAS,GAAG,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvC,SAAS,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IACD,SAAS,GAAG,mCAAmC,CAAC,SAAS,CAAC,CAAC;IAE3D,IAAI,MAAA,OAAO,CAAC,gCAAgC,mCAAI,IAAI,EAAE,CAAC;QACrD,SAAS,GAAG,IAAA,sCAAoB,EAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAA,OAAO,CAAC,WAAW,mCAAI,IAAI,EAAE,CAAC;QAChC,SAAS,GAAG,IAAA,mDAAyB,EAAC,SAAS,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB;IAYhC,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,MAAmB,EACnB,uBAAgE;;IAEhE,MAAM,2BAA2B,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,oBAAoB,CAAC;IAC7E,YAAK,CAAC,GAAG,CAAC,2DAA2D,EAAE,2BAA2B,CAAC,CAAC;IAEpG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACjC,+EAA+E;QAC/E,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACjE,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,2BAA2B,EAAE,CAAC;QAChC,IAAA,qEAAuC,EAAC,2BAA2B,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,uBAAuB,KAAK,QAAQ,EAAE,CAAC;QAChD,IAAA,8DAAgC,EAAC;YAC/B,uBAAuB;SACxB,CAAC,CAAC;IACL,CAAC;IAED,uCACK,MAAM,KACT,WAAW,kCACN,MAAM,CAAC,WAAW,KACrB,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,OAEnE;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmB;;IAC5C,MAAM,gBAAgB,GAAG,IAAA,mDAA2B,EAClD,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,gBAAgB,KAAI,SAAS,CACxB,CAAC;IAC3B,yFAAyF;IACzF,iCAAiC;IAEjC,uCACK,MAAM,KACT,UAAU,kCACL,MAAM,CAAC,UAAU,KACpB,gBAAgB,OAElB;AACJ,CAAC;AAUD;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAmB,EAAE,gBAAqC;;IAC3F,MAAM,gBAAgB,GAAG,MAAA,MAAM,CAAC,QAAQ,0CAAE,cAA2E,CAAC;IAEtH,MAAM,qBAAqB,GAAmB,CAC5C,OAAgC,EAChC,UAAkB,EAClB,QAAuB,EACvB,kBAA2B,EAC3B,EAAE;QACF,IACE,CAAC,gBAAgB,KAAK,KAAK;YACzB,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;YACrF,CAAC,CAAC,CAAC,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,UAAU,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAC3E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAgB,CAAC;QACzC,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,kBAAkB;gBACvB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,CAAC;gBACrE,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,0HAA0H;QAC1H,IAAI,OAAO,CAAC,cAAc,KAAK,qBAAqB,EAAE,CAAC;YACrD,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX;;;;;iHAKyG,CAC1G,CAAC;YACF,4BAA4B;YAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,uCACK,MAAM,KACT,QAAQ,kCACH,MAAM,CAAC,QAAQ,KAClB,cAAc,EAAE,qBAAqB,OAEvC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,qBAAqB,GACzB,0GAA0G,CAAC;AAE7G,SAAS,gBAAgB,CAAC,gBAAwB;IAChD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,mCAAmC,CAAC,MAAmB;;IACrE,MAAM,gBAAgB,GAAG,MAAA,MAAM,CAAC,QAAQ,0CAAE,cAA2E,CAAC;IAEtH,MAAM,+BAA+B,GAAmB,CACtD,OAAgC,EAChC,UAAkB,EAClB,QAAuB,EACvB,kBAA2B,EAC3B,EAAE;;QACF,IACE,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,CAAC;YAC9C,gBAAgB,CAAC,MAAC,OAAyC,CAAC,gBAAgB,mCAAI,EAAE,CAAC;YACnF,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,UAAU,CAAC,EAC5D,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAgB,CAAC;QACzC,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,kBAAkB;gBACvB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,CAAC;gBACrE,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,sHAAsH;QACtH,IAAI,OAAO,CAAC,cAAc,KAAK,+BAA+B,EAAE,CAAC;YAC/D,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX;;+GAEuG,CACxG,CAAC;YACF,4BAA4B;YAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,uCACK,MAAM,KACT,QAAQ,kCACH,MAAM,CAAC,QAAQ,KAClB,cAAc,EAAE,+BAA+B,OAEjD;AACJ,CAAC;AAQD;;GAEG;AACH,SAAgB,yBAAyB,CAAC,MAAmB;;IAC3D,MAAM,sBAAsB,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,cAAc,CAAC;IACnE,MAAM,4BAA4B,GAAG,CAAC,KAAiB,EAAW,EAAE,CAClE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAEnE,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAkC,EAAE;QAC3E,MAAM,8BAA8B,GAAG,CACrC,qBAAsD,EACjC,EAAE,CAAC,iCACrB,qBAAqB,KACxB,QAAQ,EAAE,CAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,QAAQ,KAAI,4BAA4B,CAAC,KAAK,CAAC,IAChF,CAAC;QAEH,MAAM,yBAAyB,GAAG,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAG,KAAK,CAAC,KAAI,SAAS,CAAC;QAE/E,IAAI,yBAAyB,KAAK,SAAS,IAAI,MAAM,IAAI,yBAAyB,EAAE,CAAC;YACnF,OAAO,yBAAyB,CAAC,IAAI,CAAsB,qBAAqB,CAAC,EAAE,CACjF,8BAA8B,CAAC,qBAAqB,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,8BAA8B,CAAC,yBAAyB,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,uCACK,MAAM,KACT,YAAY,kCACP,MAAM,CAAC,YAAY,KACtB,cAAc,OAEhB;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,8BAA8B;IACrC,aAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC;AAC7C,CAAC","sourcesContent":["import { debug } from '@sentry/core';\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { CustomResolutionContext, CustomResolver, Resolution } from 'metro-resolver';\nimport * as process from 'process';\nimport { env } from 'process';\nimport { enableLogger } from './enableLogger';\nimport { withSentryMiddleware } from './metroMiddleware';\nimport {\n setSentryBabelTransformerOptions,\n setSentryDefaultBabelTransformerPathEnv,\n} from './sentryBabelTransformerUtils';\nimport { createSentryMetroSerializer, unstableBeforeAssetSerializationDebugIdPlugin } from './sentryMetroSerializer';\nimport { withSentryOptionsFromFile } from './sentryOptionsSerializer';\nimport { unstableReleaseConstantsPlugin } from './sentryReleaseInjector';\nimport type { MetroCustomSerializer } from './utils';\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig';\n\nexport * from './sentryMetroSerializer';\n\nenableLogger();\n\nexport interface SentryMetroConfigOptions {\n /**\n * Annotates React components with Sentry data.\n * @default false\n */\n annotateReactComponents?:\n | boolean\n | {\n ignoredComponents?: string[];\n };\n /**\n * Adds the Sentry replay package for web.\n * @default true\n */\n includeWebReplay?: boolean;\n /**\n * Add Sentry Metro Server Middleware which\n * enables the app to fetch stack frames source context.\n * @default true\n */\n enableSourceContextInDevelopment?: boolean;\n /**\n * Load Sentry Options from a file. If `true` it will use the default path.\n * If `false` it will not load any options from a file. Only options provided in the code will be used.\n * If `string` it will use the provided path.\n *\n * @default '{projectRoot}/sentry.options.json'\n */\n optionsFile?: string | boolean;\n}\n\nexport interface SentryExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * For Expo Web, inject `release` and `version` options from `app.json`, the Expo Application Config.\n *\n * @default true\n */\n injectReleaseForWeb?: boolean;\n}\n\n/**\n * Adds Sentry to the Metro config.\n *\n * Adds Debug ID to the output bundle and source maps.\n * Collapses Sentry frames from the stack trace view in LogBox.\n */\nexport function withSentryConfig(\n config: MetroConfig,\n {\n annotateReactComponents = false,\n includeWebReplay = true,\n enableSourceContextInDevelopment = true,\n optionsFile = true,\n }: SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n let newConfig = config;\n\n newConfig = withSentryDebugId(newConfig);\n newConfig = withSentryFramesCollapsed(newConfig);\n if (annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, annotateReactComponents);\n }\n if (includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n if (enableSourceContextInDevelopment) {\n newConfig = withSentryMiddleware(newConfig);\n }\n if (optionsFile) {\n newConfig = withSentryOptionsFromFile(newConfig, optionsFile);\n }\n\n return newConfig;\n}\n\n/**\n * This function returns Default Expo configuration with Sentry plugins.\n */\nexport function getSentryExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & SentryExpoConfigOptions & SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig;\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n ...(options.injectReleaseForWeb ?? true ? [unstableReleaseConstantsPlugin(projectRoot)] : []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n });\n\n let newConfig = withSentryFramesCollapsed(config);\n if (options.annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, options.annotateReactComponents);\n }\n\n if (options.includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, options.includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n\n if (options.enableSourceContextInDevelopment ?? true) {\n newConfig = withSentryMiddleware(newConfig);\n }\n\n if (options.optionsFile ?? true) {\n newConfig = withSentryOptionsFromFile(newConfig, options.optionsFile ?? true);\n }\n\n return newConfig;\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n }) => Module[])[];\n },\n ) => MetroConfig;\n} {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('expo/metro-config');\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.');\n }\n}\n\n/**\n * Adds Sentry Babel transformer to the Metro config.\n */\nexport function withSentryBabelTransformer(\n config: MetroConfig,\n annotateReactComponents: true | { ignoredComponents?: string[] },\n): MetroConfig {\n const defaultBabelTransformerPath = config.transformer?.babelTransformerPath;\n debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);\n\n if (!defaultBabelTransformerPath) {\n // This has to be console.warn because the options is enabled but won't be used\n // eslint-disable-next-line no-console\n console.warn('`transformer.babelTransformerPath` is undefined.');\n // eslint-disable-next-line no-console\n console.warn('Sentry Babel transformer cannot be used. Not adding it...');\n return config;\n }\n\n if (defaultBabelTransformerPath) {\n setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath);\n }\n\n if (typeof annotateReactComponents === 'object') {\n setSentryBabelTransformerOptions({\n annotateReactComponents,\n });\n }\n\n return {\n ...config,\n transformer: {\n ...config.transformer,\n babelTransformerPath: require.resolve('./sentryBabelTransformer'),\n },\n };\n}\n\nfunction withSentryDebugId(config: MetroConfig): MetroConfig {\n const customSerializer = createSentryMetroSerializer(\n config.serializer?.customSerializer || undefined,\n ) as MetroCustomSerializer;\n // MetroConfig types customSerializers as async only, but sync returns are also supported\n // The default serializer is sync\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer,\n },\n };\n}\n\n// Based on: https://github.com/facebook/metro/blob/c21daba415ea26511e157f794689caab9abe8236/packages/metro-resolver/src/resolve.js#L86-L91\ntype CustomResolverBeforeMetro068 = (\n context: CustomResolutionContext,\n realModuleName: string,\n platform: string | null,\n moduleName?: string,\n) => Resolution;\n\n/**\n * Includes `@sentry/replay` packages based on the `includeWebReplay` flag and current bundle `platform`.\n */\nexport function withSentryResolver(config: MetroConfig, includeWebReplay: boolean | undefined): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (includeWebReplay === false ||\n (includeWebReplay === undefined && (platform === 'android' || platform === 'ios'))) &&\n !!(oldMetroModuleName ?? moduleName).match(/@sentry(?:-internal)?\\/replay/)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, resolve context.resolveRequest is sentryResolver itself, where on later version it is the default resolver.\n if (context.resolveRequest === sentryResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease follow one of the following options:\n- Include your resolverRequest on your metroconfig.\n- Update your Metro version to 0.68 or higher.\n- Set includeWebReplay as true on your metro config.\n- If you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryResolverRequest,\n },\n };\n}\n\n/**\n * Matches relative import paths to server-only AI/MCP modules within `@sentry/core`.\n *\n * Metro passes the module name as-written in the source code, so for imports inside\n * `@sentry/core`'s barrel file like `export { ... } from './integrations/mcp-server/index.js'`,\n * the `moduleName` will be `./integrations/mcp-server/index.js`.\n */\nconst SERVER_ONLY_MODULE_RE =\n /\\/(mcp-server|tracing\\/(vercel-ai|openai|anthropic-ai|google-genai|langchain|langgraph)|utils\\/ai)(\\/|$)/;\n\nfunction isFromSentryCore(originModulePath: string): boolean {\n return originModulePath.includes('@sentry/core');\n}\n\n/**\n * Excludes server-only AI/MCP modules from native (Android/iOS) bundles.\n */\nexport function withSentryExcludeServerOnlyResolver(config: MetroConfig): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryServerOnlyResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (platform === 'android' || platform === 'ios') &&\n isFromSentryCore((context as { originModulePath?: string }).originModulePath ?? '') &&\n SERVER_ONLY_MODULE_RE.test(oldMetroModuleName ?? moduleName)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, context.resolveRequest is sentryServerOnlyResolverRequest itself, which would cause infinite recursion.\n if (context.resolveRequest === sentryServerOnlyResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease include your resolverRequest on your metroconfig or update your Metro version to 0.68 or higher.\nIf you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryServerOnlyResolverRequest,\n },\n };\n}\n\ntype MetroFrame = Parameters<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>[0];\ntype MetroCustomizeFrame = { readonly collapse?: boolean };\ntype MetroCustomizeFrameReturnValue =\n | ReturnType<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>\n | undefined;\n\n/**\n * Collapses Sentry internal frames from the stack trace view in LogBox.\n */\nexport function withSentryFramesCollapsed(config: MetroConfig): MetroConfig {\n const originalCustomizeFrame = config.symbolicator?.customizeFrame;\n const collapseSentryInternalFrames = (frame: MetroFrame): boolean =>\n typeof frame.file === 'string' &&\n (frame.file.includes('node_modules/@sentry/core/cjs/instrument.js') ||\n frame.file.includes('node_modules/@sentry/core/cjs/debug.js'));\n\n const customizeFrame = (frame: MetroFrame): MetroCustomizeFrameReturnValue => {\n const originalOrSentryCustomizeFrame = (\n originalCustomization: MetroCustomizeFrame | undefined,\n ): MetroCustomizeFrame => ({\n ...originalCustomization,\n collapse: originalCustomization?.collapse || collapseSentryInternalFrames(frame),\n });\n\n const maybePromiseCustomization = originalCustomizeFrame?.(frame) || undefined;\n\n if (maybePromiseCustomization !== undefined && 'then' in maybePromiseCustomization) {\n return maybePromiseCustomization.then<MetroCustomizeFrame>(originalCustomization =>\n originalOrSentryCustomizeFrame(originalCustomization),\n );\n }\n\n return originalOrSentryCustomizeFrame(maybePromiseCustomization);\n };\n\n return {\n ...config,\n symbolicator: {\n ...config.symbolicator,\n customizeFrame,\n },\n };\n}\n\n/**\n * Sets the `___SENTRY_METRO_DEV_SERVER___` environment flag.\n * This is used to determine if the SDK is running in Node in Metro Dev Server.\n * For example during static routes generation in `expo-router`.\n */\nfunction setSentryMetroDevServerEnvFlag(): void {\n env.___SENTRY_METRO_DEV_SERVER___ = 'true';\n}\n"]}
1
+ {"version":3,"file":"metroconfig.js","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { CustomResolutionContext, CustomResolver, Resolution } from 'metro-resolver';\n\nimport { debug } from '@sentry/core';\nimport * as process from 'process';\nimport { env } from 'process';\n\nimport type { MetroCustomSerializer } from './utils';\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig';\n\nimport { enableLogger } from './enableLogger';\nimport { withSentryMiddleware } from './metroMiddleware';\nimport {\n setSentryBabelTransformerOptions,\n setSentryDefaultBabelTransformerPathEnv,\n} from './sentryBabelTransformerUtils';\nimport { createSentryMetroSerializer, unstableBeforeAssetSerializationDebugIdPlugin } from './sentryMetroSerializer';\nimport { withSentryOptionsFromFile } from './sentryOptionsSerializer';\nimport { unstableReleaseConstantsPlugin } from './sentryReleaseInjector';\n\nexport * from './sentryMetroSerializer';\n\nenableLogger();\n\nexport interface SentryMetroConfigOptions {\n /**\n * Annotates React components with Sentry data.\n * @default false\n */\n annotateReactComponents?:\n | boolean\n | {\n ignoredComponents?: string[];\n };\n /**\n * Adds the Sentry replay package for web.\n * @default true\n */\n includeWebReplay?: boolean;\n /**\n * Add Sentry Metro Server Middleware which\n * enables the app to fetch stack frames source context.\n * @default true\n */\n enableSourceContextInDevelopment?: boolean;\n /**\n * Load Sentry Options from a file. If `true` it will use the default path.\n * If `false` it will not load any options from a file. Only options provided in the code will be used.\n * If `string` it will use the provided path.\n *\n * @default '{projectRoot}/sentry.options.json'\n */\n optionsFile?: string | boolean;\n}\n\nexport interface SentryExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * For Expo Web, inject `release` and `version` options from `app.json`, the Expo Application Config.\n *\n * @default true\n */\n injectReleaseForWeb?: boolean;\n}\n\n/**\n * Adds Sentry to the Metro config.\n *\n * Adds Debug ID to the output bundle and source maps.\n * Collapses Sentry frames from the stack trace view in LogBox.\n */\nexport function withSentryConfig(\n config: MetroConfig,\n {\n annotateReactComponents = false,\n includeWebReplay = true,\n enableSourceContextInDevelopment = true,\n optionsFile = true,\n }: SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n let newConfig = config;\n\n newConfig = withSentryDebugId(newConfig);\n newConfig = withSentryFramesCollapsed(newConfig);\n if (annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, annotateReactComponents);\n }\n if (includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n if (enableSourceContextInDevelopment) {\n newConfig = withSentryMiddleware(newConfig);\n }\n if (optionsFile) {\n newConfig = withSentryOptionsFromFile(newConfig, optionsFile);\n }\n\n return newConfig;\n}\n\n/**\n * This function returns Default Expo configuration with Sentry plugins.\n */\nexport function getSentryExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & SentryExpoConfigOptions & SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig;\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n ...((options.injectReleaseForWeb ?? true) ? [unstableReleaseConstantsPlugin(projectRoot)] : []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n });\n\n let newConfig = withSentryFramesCollapsed(config);\n if (options.annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, options.annotateReactComponents);\n }\n\n if (options.includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, options.includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n\n if (options.enableSourceContextInDevelopment ?? true) {\n newConfig = withSentryMiddleware(newConfig);\n }\n\n if (options.optionsFile ?? true) {\n newConfig = withSentryOptionsFromFile(newConfig, options.optionsFile ?? true);\n }\n\n return newConfig;\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n }) => Module[])[];\n },\n ) => MetroConfig;\n} {\n try {\n return require('expo/metro-config');\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.');\n }\n}\n\n/**\n * Adds Sentry Babel transformer to the Metro config.\n */\nexport function withSentryBabelTransformer(\n config: MetroConfig,\n annotateReactComponents: true | { ignoredComponents?: string[] },\n): MetroConfig {\n const defaultBabelTransformerPath = config.transformer?.babelTransformerPath;\n debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);\n\n if (!defaultBabelTransformerPath) {\n // This has to be console.warn because the options is enabled but won't be used\n // oxlint-disable-next-line eslint(no-console)\n console.warn('`transformer.babelTransformerPath` is undefined.');\n // oxlint-disable-next-line eslint(no-console)\n console.warn('Sentry Babel transformer cannot be used. Not adding it...');\n return config;\n }\n\n if (defaultBabelTransformerPath) {\n setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath);\n }\n\n if (typeof annotateReactComponents === 'object') {\n setSentryBabelTransformerOptions({\n annotateReactComponents,\n });\n }\n\n return {\n ...config,\n transformer: {\n ...config.transformer,\n babelTransformerPath: require.resolve('./sentryBabelTransformer'),\n },\n };\n}\n\nfunction withSentryDebugId(config: MetroConfig): MetroConfig {\n const customSerializer = createSentryMetroSerializer(\n config.serializer?.customSerializer || undefined,\n ) as MetroCustomSerializer;\n // MetroConfig types customSerializers as async only, but sync returns are also supported\n // The default serializer is sync\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer,\n },\n };\n}\n\n// Based on: https://github.com/facebook/metro/blob/c21daba415ea26511e157f794689caab9abe8236/packages/metro-resolver/src/resolve.js#L86-L91\ntype CustomResolverBeforeMetro068 = (\n context: CustomResolutionContext,\n realModuleName: string,\n platform: string | null,\n moduleName?: string,\n) => Resolution;\n\n/**\n * Includes `@sentry/replay` packages based on the `includeWebReplay` flag and current bundle `platform`.\n */\nexport function withSentryResolver(config: MetroConfig, includeWebReplay: boolean | undefined): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (includeWebReplay === false ||\n (includeWebReplay === undefined && (platform === 'android' || platform === 'ios'))) &&\n !!(oldMetroModuleName ?? moduleName).match(/@sentry(?:-internal)?\\/replay/)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, resolve context.resolveRequest is sentryResolver itself, where on later version it is the default resolver.\n if (context.resolveRequest === sentryResolverRequest) {\n // oxlint-disable-next-line eslint(no-console)\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease follow one of the following options:\n- Include your resolverRequest on your metroconfig.\n- Update your Metro version to 0.68 or higher.\n- Set includeWebReplay as true on your metro config.\n- If you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryResolverRequest,\n },\n };\n}\n\n/**\n * Matches relative import paths to server-only AI/MCP modules within `@sentry/core`.\n *\n * Metro passes the module name as-written in the source code, so for imports inside\n * `@sentry/core`'s barrel file like `export { ... } from './integrations/mcp-server/index.js'`,\n * the `moduleName` will be `./integrations/mcp-server/index.js`.\n */\nconst SERVER_ONLY_MODULE_RE =\n /\\/(mcp-server|tracing\\/(vercel-ai|openai|anthropic-ai|google-genai|langchain|langgraph)|utils\\/ai)(\\/|$)/;\n\nfunction isFromSentryCore(originModulePath: string): boolean {\n return originModulePath.includes('@sentry/core');\n}\n\n/**\n * Excludes server-only AI/MCP modules from native (Android/iOS) bundles.\n */\nexport function withSentryExcludeServerOnlyResolver(config: MetroConfig): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryServerOnlyResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (platform === 'android' || platform === 'ios') &&\n isFromSentryCore((context as { originModulePath?: string }).originModulePath ?? '') &&\n SERVER_ONLY_MODULE_RE.test(oldMetroModuleName ?? moduleName)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, context.resolveRequest is sentryServerOnlyResolverRequest itself, which would cause infinite recursion.\n if (context.resolveRequest === sentryServerOnlyResolverRequest) {\n // oxlint-disable-next-line eslint(no-console)\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease include your resolverRequest on your metroconfig or update your Metro version to 0.68 or higher.\nIf you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryServerOnlyResolverRequest,\n },\n };\n}\n\ntype MetroFrame = Parameters<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>[0];\ntype MetroCustomizeFrame = { readonly collapse?: boolean };\ntype MetroCustomizeFrameReturnValue =\n | ReturnType<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>\n | undefined;\n\n/**\n * Collapses Sentry internal frames from the stack trace view in LogBox.\n */\nexport function withSentryFramesCollapsed(config: MetroConfig): MetroConfig {\n const originalCustomizeFrame = config.symbolicator?.customizeFrame;\n const collapseSentryInternalFrames = (frame: MetroFrame): boolean =>\n typeof frame.file === 'string' &&\n (frame.file.includes('node_modules/@sentry/core/cjs/instrument.js') ||\n frame.file.includes('node_modules/@sentry/core/cjs/debug.js'));\n\n const customizeFrame = (frame: MetroFrame): MetroCustomizeFrameReturnValue => {\n const originalOrSentryCustomizeFrame = (\n originalCustomization: MetroCustomizeFrame | undefined,\n ): MetroCustomizeFrame => ({\n ...originalCustomization,\n collapse: originalCustomization?.collapse || collapseSentryInternalFrames(frame),\n });\n\n const maybePromiseCustomization = originalCustomizeFrame?.(frame) || undefined;\n\n if (maybePromiseCustomization !== undefined && 'then' in maybePromiseCustomization) {\n return maybePromiseCustomization.then<MetroCustomizeFrame>(originalCustomization =>\n originalOrSentryCustomizeFrame(originalCustomization),\n );\n }\n\n return originalOrSentryCustomizeFrame(maybePromiseCustomization);\n };\n\n return {\n ...config,\n symbolicator: {\n ...config.symbolicator,\n customizeFrame,\n },\n };\n}\n\n/**\n * Sets the `___SENTRY_METRO_DEV_SERVER___` environment flag.\n * This is used to determine if the SDK is running in Node in Metro Dev Server.\n * For example during static routes generation in `expo-router`.\n */\nfunction setSentryMetroDevServerEnvFlag(): void {\n env.___SENTRY_METRO_DEV_SERVER___ = 'true';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sentryBabelTransformerUtils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,MAAM,6BAA6B,GAAG;IAAE,uBAAuB,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3G,eAAO,MAAM,qCAAqC,0CAA0C,CAAC;AAC7F,eAAO,MAAM,gCAAgC,qCAAqC,CAAC;AAEnF;;GAEG;AACH,wBAAgB,uCAAuC,CAAC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAGjG;AAED;;GAEG;AACH,wBAAgB,uCAAuC,IAAI,MAAM,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,gBAAgB,CAW9D;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAgB7F;AAED;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,6BAA6B,GAAG,SAAS,CAe5F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,gBAAgB,CAiB/D"}
1
+ {"version":3,"file":"sentryBabelTransformerUtils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,MAAM,6BAA6B,GAAG;IAAE,uBAAuB,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3G,eAAO,MAAM,qCAAqC,0CAA0C,CAAC;AAC7F,eAAO,MAAM,gCAAgC,qCAAqC,CAAC;AAEnF;;GAEG;AACH,wBAAgB,uCAAuC,CAAC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAGjG;AAED;;GAEG;AACH,wBAAgB,uCAAuC,IAAI,MAAM,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,gBAAgB,CAU9D;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAgB7F;AAED;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,6BAA6B,GAAG,SAAS,CAe5F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,gBAAgB,CAiB/D"}
@@ -34,7 +34,6 @@ function loadDefaultBabelTransformer() {
34
34
  throw new Error(`Default Babel transformer path environment variable ${exports.SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH} is not set.`);
35
35
  }
36
36
  core_1.debug.log(`Loading default Babel transformer from ${defaultBabelTransformerPath}`);
37
- // eslint-disable-next-line @typescript-eslint/no-var-requires
38
37
  return require(defaultBabelTransformerPath);
39
38
  }
40
39
  /**
@@ -47,7 +46,7 @@ function setSentryBabelTransformerOptions(options) {
47
46
  optionsString = JSON.stringify(options);
48
47
  }
49
48
  catch (e) {
50
- // eslint-disable-next-line no-console
49
+ // oxlint-disable-next-line eslint(no-console)
51
50
  console.error('Failed to stringify Sentry Babel transformer options', e);
52
51
  }
53
52
  if (!optionsString) {
@@ -70,7 +69,7 @@ function getSentryBabelTransformerOptions() {
70
69
  return JSON.parse(optionsString);
71
70
  }
72
71
  catch (e) {
73
- // eslint-disable-next-line no-console
72
+ // oxlint-disable-next-line eslint(no-console)
74
73
  console.error('Failed to parse Sentry Babel transformer options', e);
75
74
  return undefined;
76
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sentryBabelTransformerUtils.js","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":";;;AAaA,0FAGC;AAKD,0FAEC;AAKD,kEAWC;AAKD,4EAgBC;AAKD,4EAeC;AAKD,oEAiBC;AAtGD,6FAA8E;AAC9E,uCAAqC;AACrC,mCAAmC;AAKtB,QAAA,qCAAqC,GAAG,uCAAuC,CAAC;AAChF,QAAA,gCAAgC,GAAG,kCAAkC,CAAC;AAEnF;;GAEG;AACH,SAAgB,uCAAuC,CAAC,2BAAmC;IACzF,OAAO,CAAC,GAAG,CAAC,6CAAqC,CAAC,GAAG,2BAA2B,CAAC;IACjF,YAAK,CAAC,GAAG,CAAC,wCAAwC,2BAA2B,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,SAAgB,uCAAuC;IACrD,OAAO,OAAO,CAAC,GAAG,CAAC,6CAAqC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B;IACzC,MAAM,2BAA2B,GAAG,uCAAuC,EAAE,CAAC;IAC9E,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uDAAuD,6CAAqC,cAAc,CAC3G,CAAC;IACJ,CAAC;IAED,YAAK,CAAC,GAAG,CAAC,0CAA0C,2BAA2B,EAAE,CAAC,CAAC;IACnF,8DAA8D;IAC9D,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,gCAAgC,CAAC,OAAsC;IACrF,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,YAAK,CAAC,GAAG,CAAC,+CAA+C,EAAE,OAAO,CAAC,CAAC;QACpE,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,YAAK,CAAC,GAAG,CAAC,2CAA2C,wCAAgC,EAAE,EAAE,aAAa,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,wCAAgC,CAAC,GAAG,aAAa,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,gCAAgC;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAgC,CAAC,CAAC;IACpE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,YAAK,CAAC,GAAG,CAAC,yDAAyD,wCAAgC,aAAa,CAAC,CAAC;QAClH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,YAAK,CAAC,GAAG,CAAC,iDAAiD,aAAa,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B;IAC1C,MAAM,kBAAkB,GAAG,2BAA2B,EAAE,CAAC;IACzD,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;IAEnD,4EAA4E;IAC5E,MAAM,SAAS,GAAkC,CAAC,GAAG,IAAI,EAAE,EAAE;QAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhC,gCAAgC,CAAC,eAAe,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,CAAC,CAAC;QAEpF,OAAO,kBAAkB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,uCACK,kBAAkB,KACrB,SAAS,IACT;AACJ,CAAC;AAED,SAAS,gCAAgC,CACvC,IAAsC,EACtC,OAA6E;IAE7E,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,yCAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yCAAuB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import componentAnnotatePlugin from '@sentry/babel-plugin-component-annotate';\nimport { debug } from '@sentry/core';\nimport * as process from 'process';\nimport type { BabelTransformer, BabelTransformerArgs } from './vendor/metro/metroBabelTransformer';\n\nexport type SentryBabelTransformerOptions = { annotateReactComponents?: { ignoredComponents?: string[] } };\n\nexport const SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH = 'SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH';\nexport const SENTRY_BABEL_TRANSFORMER_OPTIONS = 'SENTRY_BABEL_TRANSFORMER_OPTIONS';\n\n/**\n * Sets default Babel transformer path to the environment variables.\n */\nexport function setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath: string): void {\n process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH] = defaultBabelTransformerPath;\n debug.log(`Saved default Babel transformer path ${defaultBabelTransformerPath}`);\n}\n\n/**\n * Reads default Babel transformer path from the environment variables.\n */\nexport function getSentryDefaultBabelTransformerPathEnv(): string | undefined {\n return process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH];\n}\n\n/**\n * Loads default Babel transformer from `@react-native/metro-config` -> `@react-native/metro-babel-transformer`.\n */\nexport function loadDefaultBabelTransformer(): BabelTransformer {\n const defaultBabelTransformerPath = getSentryDefaultBabelTransformerPathEnv();\n if (!defaultBabelTransformerPath) {\n throw new Error(\n `Default Babel transformer path environment variable ${SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH} is not set.`,\n );\n }\n\n debug.log(`Loading default Babel transformer from ${defaultBabelTransformerPath}`);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(defaultBabelTransformerPath);\n}\n\n/**\n *\n */\nexport function setSentryBabelTransformerOptions(options: SentryBabelTransformerOptions): void {\n let optionsString: string | null = null;\n try {\n debug.log('Stringifying Sentry Babel transformer options', options);\n optionsString = JSON.stringify(options);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to stringify Sentry Babel transformer options', e);\n }\n\n if (!optionsString) {\n return;\n }\n\n debug.log(`Sentry Babel transformer options set to ${SENTRY_BABEL_TRANSFORMER_OPTIONS}`, optionsString);\n process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS] = optionsString;\n}\n\n/**\n *\n */\nexport function getSentryBabelTransformerOptions(): SentryBabelTransformerOptions | undefined {\n const optionsString = process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS];\n if (!optionsString) {\n debug.log(`Sentry Babel transformer options environment variable ${SENTRY_BABEL_TRANSFORMER_OPTIONS} is not set`);\n return undefined;\n }\n\n try {\n debug.log(`Parsing Sentry Babel transformer options from ${optionsString}`);\n return JSON.parse(optionsString);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to parse Sentry Babel transformer options', e);\n return undefined;\n }\n}\n\n/**\n * Creates a Babel transformer with Sentry component annotation plugin.\n */\nexport function createSentryBabelTransformer(): BabelTransformer {\n const defaultTransformer = loadDefaultBabelTransformer();\n const options = getSentryBabelTransformerOptions();\n\n // Using spread operator to avoid any conflicts with the default transformer\n const transform: BabelTransformer['transform'] = (...args) => {\n const transformerArgs = args[0];\n\n addSentryComponentAnnotatePlugin(transformerArgs, options?.annotateReactComponents);\n\n return defaultTransformer.transform(...args);\n };\n\n return {\n ...defaultTransformer,\n transform,\n };\n}\n\nfunction addSentryComponentAnnotatePlugin(\n args: BabelTransformerArgs | undefined,\n options: SentryBabelTransformerOptions['annotateReactComponents'] | undefined,\n): void {\n if (!args || typeof args.filename !== 'string' || !Array.isArray(args.plugins)) {\n return undefined;\n }\n\n if (!args.filename.includes('node_modules')) {\n if (options) {\n args.plugins.push([componentAnnotatePlugin, options]);\n } else {\n args.plugins.push(componentAnnotatePlugin);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sentryBabelTransformerUtils.js","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import componentAnnotatePlugin from '@sentry/babel-plugin-component-annotate';\nimport { debug } from '@sentry/core';\nimport * as process from 'process';\n\nimport type { BabelTransformer, BabelTransformerArgs } from './vendor/metro/metroBabelTransformer';\n\nexport type SentryBabelTransformerOptions = { annotateReactComponents?: { ignoredComponents?: string[] } };\n\nexport const SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH = 'SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH';\nexport const SENTRY_BABEL_TRANSFORMER_OPTIONS = 'SENTRY_BABEL_TRANSFORMER_OPTIONS';\n\n/**\n * Sets default Babel transformer path to the environment variables.\n */\nexport function setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath: string): void {\n process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH] = defaultBabelTransformerPath;\n debug.log(`Saved default Babel transformer path ${defaultBabelTransformerPath}`);\n}\n\n/**\n * Reads default Babel transformer path from the environment variables.\n */\nexport function getSentryDefaultBabelTransformerPathEnv(): string | undefined {\n return process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH];\n}\n\n/**\n * Loads default Babel transformer from `@react-native/metro-config` -> `@react-native/metro-babel-transformer`.\n */\nexport function loadDefaultBabelTransformer(): BabelTransformer {\n const defaultBabelTransformerPath = getSentryDefaultBabelTransformerPathEnv();\n if (!defaultBabelTransformerPath) {\n throw new Error(\n `Default Babel transformer path environment variable ${SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH} is not set.`,\n );\n }\n\n debug.log(`Loading default Babel transformer from ${defaultBabelTransformerPath}`);\n return require(defaultBabelTransformerPath);\n}\n\n/**\n *\n */\nexport function setSentryBabelTransformerOptions(options: SentryBabelTransformerOptions): void {\n let optionsString: string | null = null;\n try {\n debug.log('Stringifying Sentry Babel transformer options', options);\n optionsString = JSON.stringify(options);\n } catch (e) {\n // oxlint-disable-next-line eslint(no-console)\n console.error('Failed to stringify Sentry Babel transformer options', e);\n }\n\n if (!optionsString) {\n return;\n }\n\n debug.log(`Sentry Babel transformer options set to ${SENTRY_BABEL_TRANSFORMER_OPTIONS}`, optionsString);\n process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS] = optionsString;\n}\n\n/**\n *\n */\nexport function getSentryBabelTransformerOptions(): SentryBabelTransformerOptions | undefined {\n const optionsString = process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS];\n if (!optionsString) {\n debug.log(`Sentry Babel transformer options environment variable ${SENTRY_BABEL_TRANSFORMER_OPTIONS} is not set`);\n return undefined;\n }\n\n try {\n debug.log(`Parsing Sentry Babel transformer options from ${optionsString}`);\n return JSON.parse(optionsString);\n } catch (e) {\n // oxlint-disable-next-line eslint(no-console)\n console.error('Failed to parse Sentry Babel transformer options', e);\n return undefined;\n }\n}\n\n/**\n * Creates a Babel transformer with Sentry component annotation plugin.\n */\nexport function createSentryBabelTransformer(): BabelTransformer {\n const defaultTransformer = loadDefaultBabelTransformer();\n const options = getSentryBabelTransformerOptions();\n\n // Using spread operator to avoid any conflicts with the default transformer\n const transform: BabelTransformer['transform'] = (...args) => {\n const transformerArgs = args[0];\n\n addSentryComponentAnnotatePlugin(transformerArgs, options?.annotateReactComponents);\n\n return defaultTransformer.transform(...args);\n };\n\n return {\n ...defaultTransformer,\n transform,\n };\n}\n\nfunction addSentryComponentAnnotatePlugin(\n args: BabelTransformerArgs | undefined,\n options: SentryBabelTransformerOptions['annotateReactComponents'] | undefined,\n): void {\n if (!args || typeof args.filename !== 'string' || !Array.isArray(args.plugins)) {\n return undefined;\n }\n\n if (!args.filename.includes('node_modules')) {\n if (options) {\n args.plugins.push([componentAnnotatePlugin, options]);\n } else {\n args.plugins.push(componentAnnotatePlugin);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sentryMetroSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAU,eAAe,EAA4D,MAAM,SAAS,CAAC;AAkBjH;;GAEG;AACH,wBAAgB,6CAA6C,CAAC,EAC5D,UAAU,EACV,OAAO,GACR,EAAE;IACD,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,EAAE,CAcX;AAGD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,mBAAmB,eAAe,KAAG,eA4DhF,CAAC"}
1
+ {"version":3,"file":"sentryMetroSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAU,eAAe,EAA4D,MAAM,SAAS,CAAC;AAmBjH;;GAEG;AACH,wBAAgB,6CAA6C,CAAC,EAC5D,UAAU,EACV,OAAO,GACR,EAAE;IACD,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,EAAE,CAcX;AAGD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,mBAAmB,eAAe,KAAG,eA4DhF,CAAC"}
@@ -27,7 +27,7 @@ function unstableBeforeAssetSerializationDebugIdPlugin({ premodules, debugId, })
27
27
  }
28
28
  const debugIdModuleExists = premodules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;
29
29
  if (debugIdModuleExists) {
30
- // eslint-disable-next-line no-console
30
+ // oxlint-disable-next-line eslint(no-console)
31
31
  console.warn('\n\nDebug ID module found. Skipping Sentry Debug ID module...\n\n');
32
32
  return premodules;
33
33
  }
@@ -50,7 +50,7 @@ const createSentryMetroSerializer = (customSerializer) => {
50
50
  }
51
51
  const debugIdModuleExists = preModules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;
52
52
  if (debugIdModuleExists) {
53
- // eslint-disable-next-line no-console
53
+ // oxlint-disable-next-line eslint(no-console)
54
54
  console.warn('Debug ID module found. Skipping Sentry Debug ID module...');
55
55
  return serializer(entryPoint, preModules, graph, options);
56
56
  }
@@ -70,11 +70,11 @@ const createSentryMetroSerializer = (customSerializer) => {
70
70
  // from `@babel/generator` and defined it locally, it subtly changed the source map output format.
71
71
  // https://github.com/facebook/metro/blob/main/packages/metro-source-map/src/source-map.js#L47
72
72
  debugId = calculateDebugId(bundleCode);
73
- // eslint-disable-next-line no-console
73
+ // oxlint-disable-next-line eslint(no-console)
74
74
  console.log('info ' + `Bundle Debug ID (calculated): ${debugId}`);
75
75
  }
76
76
  // Only print debug id for command line builds => not hot reload from dev server
77
- // eslint-disable-next-line no-console
77
+ // oxlint-disable-next-line eslint(no-console)
78
78
  console.log('info ' + `Bundle Debug ID: ${debugId}`);
79
79
  const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`;
80
80
  const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT);
@@ -140,7 +140,6 @@ function calculateDebugId(bundleCode, modules) {
140
140
  return (0, utils_1.stringToUUID)(hash.digest('hex'));
141
141
  }
142
142
  function injectDebugId(code, debugId) {
143
- // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor
144
143
  return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId);
145
144
  }
146
145
  //# sourceMappingURL=sentryMetroSerializer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sentryMetroSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { Bundle, MetroSerializer, MetroSerializerOutput, SerializedBundle, VirtualJSOutput } from './utils';\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n prependModule,\n stringToUUID,\n} from './utils';\nimport { createDefaultMetroSerializer } from './vendor/metro/utils';\n\ntype SourceMap = Record<string, unknown>;\n\nconst DEBUG_ID_PLACE_HOLDER = '__debug_id_place_holder__';\nconst DEBUG_ID_MODULE_PATH = '__debugid__';\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL=';\nconst DEBUG_ID_COMMENT = '//# debugId=';\n\n/**\n * Adds Sentry Debug ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n}): Module[] {\n if (!debugId) {\n return premodules;\n }\n\n const debugIdModuleExists = premodules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('\\n\\nDebug ID module found. Skipping Sentry Debug ID module...\\n\\n');\n return premodules;\n }\n\n const debugIdModule = createDebugIdModule(debugId);\n return prependModule(premodules, debugIdModule);\n}\n\n// TODO: deprecate this and afterwards rename to createSentryDebugIdSerializer\n/**\n * Creates a Metro serializer that adds Debug ID module to the plain bundle.\n * The Debug ID module is a virtual module that provides a debug ID in runtime.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createSentryMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer();\n return async function (entryPoint, preModules, graph, options) {\n if (graph.transformOptions.hot) {\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModuleExists = preModules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('Debug ID module found. Skipping Sentry Debug ID module...');\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER);\n options.sentryBundleCallback = createSentryBundleCallback(debugIdModule);\n const modifiedPreModules = prependModule(preModules, debugIdModule);\n\n // Run wrapped serializer\n const serializerResult = serializer(entryPoint, modifiedPreModules, graph, options);\n const { code: bundleCode, map: bundleMapString } = await extractSerializerResult(serializerResult);\n\n // Add debug id comment to the bundle\n let debugId = determineDebugIdFromBundleSource(bundleCode);\n if (!debugId) {\n // For lazy-loaded chunks or bundles without the debug ID module,\n // calculate the debug ID from the bundle content.\n // This ensures Metro 0.83.2+ code-split bundles get debug IDs.\n // That needs to be done because when Metro 0.83.2 stopped importing `BabelSourceMapSegment`\n // from `@babel/generator` and defined it locally, it subtly changed the source map output format.\n // https://github.com/facebook/metro/blob/main/packages/metro-source-map/src/source-map.js#L47\n debugId = calculateDebugId(bundleCode);\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID (calculated): ${debugId}`);\n }\n // Only print debug id for command line builds => not hot reload from dev server\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID: ${debugId}`);\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`;\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT);\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the debug id comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the debug id comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment,\n )}`;\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString);\n // For now we write both fields until we know what will become the standard - if ever.\n bundleMap['debug_id'] = debugId;\n bundleMap['debugId'] = debugId;\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n };\n };\n};\n\n/**\n * This function is expected to be called after serializer creates the final bundle object\n * and before the source maps are generated.\n *\n * It injects a debug ID into the bundle and returns the modified bundle.\n *\n * Access it via `options.sentryBundleCallback` in your custom serializer.\n */\nfunction createSentryBundleCallback(debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }) {\n return (bundle: Bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules);\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId));\n bundle.pre = injectDebugId(bundle.pre, debugId);\n return bundle;\n };\n}\n\nasync function extractSerializerResult(serializerResult: MetroSerializerOutput): Promise<SerializedBundle> {\n if (typeof serializerResult === 'string') {\n return { code: serializerResult, map: '{}' };\n }\n\n if ('map' in serializerResult) {\n return { code: serializerResult.code, map: serializerResult.map };\n }\n\n const awaitedResult = await serializerResult;\n if (typeof awaitedResult === 'string') {\n return { code: awaitedResult, map: '{}' };\n }\n\n return { code: awaitedResult.code, map: awaitedResult.map };\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId));\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5');\n hash.update(bundleCode);\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code);\n }\n }\n return stringToUUID(hash.digest('hex'));\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId);\n}\n"]}
1
+ {"version":3,"file":"sentryMetroSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\n\nimport * as crypto from 'crypto';\n\nimport type { Bundle, MetroSerializer, MetroSerializerOutput, SerializedBundle, VirtualJSOutput } from './utils';\n\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n prependModule,\n stringToUUID,\n} from './utils';\nimport { createDefaultMetroSerializer } from './vendor/metro/utils';\n\ntype SourceMap = Record<string, unknown>;\n\nconst DEBUG_ID_PLACE_HOLDER = '__debug_id_place_holder__';\nconst DEBUG_ID_MODULE_PATH = '__debugid__';\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL=';\nconst DEBUG_ID_COMMENT = '//# debugId=';\n\n/**\n * Adds Sentry Debug ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n}): Module[] {\n if (!debugId) {\n return premodules;\n }\n\n const debugIdModuleExists = premodules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // oxlint-disable-next-line eslint(no-console)\n console.warn('\\n\\nDebug ID module found. Skipping Sentry Debug ID module...\\n\\n');\n return premodules;\n }\n\n const debugIdModule = createDebugIdModule(debugId);\n return prependModule(premodules, debugIdModule);\n}\n\n// TODO: deprecate this and afterwards rename to createSentryDebugIdSerializer\n/**\n * Creates a Metro serializer that adds Debug ID module to the plain bundle.\n * The Debug ID module is a virtual module that provides a debug ID in runtime.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createSentryMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer();\n return async function (entryPoint, preModules, graph, options) {\n if (graph.transformOptions.hot) {\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModuleExists = preModules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // oxlint-disable-next-line eslint(no-console)\n console.warn('Debug ID module found. Skipping Sentry Debug ID module...');\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER);\n options.sentryBundleCallback = createSentryBundleCallback(debugIdModule);\n const modifiedPreModules = prependModule(preModules, debugIdModule);\n\n // Run wrapped serializer\n const serializerResult = serializer(entryPoint, modifiedPreModules, graph, options);\n const { code: bundleCode, map: bundleMapString } = await extractSerializerResult(serializerResult);\n\n // Add debug id comment to the bundle\n let debugId = determineDebugIdFromBundleSource(bundleCode);\n if (!debugId) {\n // For lazy-loaded chunks or bundles without the debug ID module,\n // calculate the debug ID from the bundle content.\n // This ensures Metro 0.83.2+ code-split bundles get debug IDs.\n // That needs to be done because when Metro 0.83.2 stopped importing `BabelSourceMapSegment`\n // from `@babel/generator` and defined it locally, it subtly changed the source map output format.\n // https://github.com/facebook/metro/blob/main/packages/metro-source-map/src/source-map.js#L47\n debugId = calculateDebugId(bundleCode);\n // oxlint-disable-next-line eslint(no-console)\n console.log('info ' + `Bundle Debug ID (calculated): ${debugId}`);\n }\n // Only print debug id for command line builds => not hot reload from dev server\n // oxlint-disable-next-line eslint(no-console)\n console.log('info ' + `Bundle Debug ID: ${debugId}`);\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`;\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT);\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the debug id comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the debug id comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment,\n )}`;\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString);\n // For now we write both fields until we know what will become the standard - if ever.\n bundleMap['debug_id'] = debugId;\n bundleMap['debugId'] = debugId;\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n };\n };\n};\n\n/**\n * This function is expected to be called after serializer creates the final bundle object\n * and before the source maps are generated.\n *\n * It injects a debug ID into the bundle and returns the modified bundle.\n *\n * Access it via `options.sentryBundleCallback` in your custom serializer.\n */\nfunction createSentryBundleCallback(debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }) {\n return (bundle: Bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules);\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId));\n bundle.pre = injectDebugId(bundle.pre, debugId);\n return bundle;\n };\n}\n\nasync function extractSerializerResult(serializerResult: MetroSerializerOutput): Promise<SerializedBundle> {\n if (typeof serializerResult === 'string') {\n return { code: serializerResult, map: '{}' };\n }\n\n if ('map' in serializerResult) {\n return { code: serializerResult.code, map: serializerResult.map };\n }\n\n const awaitedResult = await serializerResult;\n if (typeof awaitedResult === 'string') {\n return { code: awaitedResult, map: '{}' };\n }\n\n return { code: awaitedResult.code, map: awaitedResult.map };\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId));\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5');\n hash.update(bundleCode);\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code);\n }\n }\n return stringToUUID(hash.digest('hex'));\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sentryOptionsSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAA4C,MAAM,OAAO,CAAC;AASnF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAkDzG"}
1
+ {"version":3,"file":"sentryOptionsSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA4C,MAAM,OAAO,CAAC;AAanF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAkDzG"}
@@ -5,7 +5,6 @@ const core_1 = require("@sentry/core");
5
5
  const fs = require("fs");
6
6
  const path = require("path");
7
7
  const utils_1 = require("./utils");
8
- // eslint-disable-next-line import/no-extraneous-dependencies
9
8
  const countLines_1 = require("./vendor/metro/countLines");
10
9
  const DEFAULT_OPTIONS_FILE_NAME = 'sentry.options.json';
11
10
  /**
@@ -18,7 +17,7 @@ function withSentryOptionsFromFile(config, optionsFile) {
18
17
  }
19
18
  const { projectRoot } = config;
20
19
  if (!projectRoot) {
21
- // eslint-disable-next-line no-console
20
+ // oxlint-disable-next-line eslint(no-console)
22
21
  console.error('[@sentry/react-native/metro] Project root is required to load Sentry options from a file');
23
22
  return config;
24
23
  }
@@ -33,7 +32,7 @@ function withSentryOptionsFromFile(config, optionsFile) {
33
32
  if (!originalSerializer) {
34
33
  // It's okay to bail here because we don't expose this for direct usage, but as part of `withSentryConfig`
35
34
  // If used directly in RN, the user is responsible for providing a custom serializer first, Expo provides serializer in default config
36
- // eslint-disable-next-line no-console
35
+ // oxlint-disable-next-line eslint(no-console)
37
36
  console.error('[@sentry/react-native/metro] `config.serializer.customSerializer` is required to load Sentry options from a file');
38
37
  return config;
39
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sentryOptionsSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@sentry/core';\nimport * as fs from 'fs';\nimport type { MetroConfig, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport * as path from 'path';\nimport type { MetroCustomSerializer, VirtualJSOutput } from './utils';\nimport { createSet } from './utils';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport countLines from './vendor/metro/countLines';\n\nconst DEFAULT_OPTIONS_FILE_NAME = 'sentry.options.json';\n\n/**\n * Loads Sentry options from a file in\n */\nexport function withSentryOptionsFromFile(config: MetroConfig, optionsFile: string | boolean): MetroConfig {\n if (optionsFile === false) {\n return config;\n }\n\n const { projectRoot } = config;\n if (!projectRoot) {\n // eslint-disable-next-line no-console\n console.error('[@sentry/react-native/metro] Project root is required to load Sentry options from a file');\n return config;\n }\n\n let optionsPath = path.join(projectRoot, DEFAULT_OPTIONS_FILE_NAME);\n if (typeof optionsFile === 'string' && path.isAbsolute(optionsFile)) {\n optionsPath = optionsFile;\n } else if (typeof optionsFile === 'string') {\n optionsPath = path.join(projectRoot, optionsFile);\n }\n\n const originalSerializer = config.serializer?.customSerializer;\n if (!originalSerializer) {\n // It's okay to bail here because we don't expose this for direct usage, but as part of `withSentryConfig`\n // If used directly in RN, the user is responsible for providing a custom serializer first, Expo provides serializer in default config\n // eslint-disable-next-line no-console\n console.error(\n '[@sentry/react-native/metro] `config.serializer.customSerializer` is required to load Sentry options from a file',\n );\n return config;\n }\n\n const sentryOptionsSerializer: MetroCustomSerializer = (\n entryPoint: string,\n preModules: readonly Module[],\n graph: ReadOnlyGraph,\n options: SerializerOptions,\n ) => {\n const sentryOptionsModule = createSentryOptionsModule(optionsPath);\n if (sentryOptionsModule) {\n (preModules as Module[]).push(sentryOptionsModule);\n }\n return originalSerializer(entryPoint, preModules, graph, options);\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: sentryOptionsSerializer,\n },\n };\n}\n\nfunction createSentryOptionsModule(filePath: string): Module<VirtualJSOutput> | null {\n let content: string;\n try {\n content = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n logger.debug(`[@sentry/react-native/metro] Sentry options file does not exist at ${filePath}`);\n } else {\n logger.error(`[@sentry/react-native/metro] Failed to read Sentry options file at ${filePath}`);\n }\n return null;\n }\n\n let parsedContent: Record<string, unknown>;\n try {\n parsedContent = JSON.parse(content);\n } catch (error) {\n logger.error(`[@sentry/react-native/metro] Failed to parse Sentry options file at ${filePath}`);\n return null;\n }\n\n const minifiedContent = JSON.stringify(parsedContent);\n const optionsCode = `var __SENTRY_OPTIONS__=${minifiedContent};`;\n\n logger.debug(`[@sentry/react-native/metro] Sentry options added to the bundle from file at ${filePath}`);\n return {\n dependencies: new Map(),\n getSource: () => Buffer.from(optionsCode),\n inverseDependencies: createSet(),\n path: '__sentry-options__',\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: optionsCode,\n lineCount: countLines(optionsCode),\n map: [],\n },\n },\n ],\n };\n}\n"]}
1
+ {"version":3,"file":"sentryOptionsSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetroConfig, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\n\nimport { logger } from '@sentry/core';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport type { MetroCustomSerializer, VirtualJSOutput } from './utils';\n\nimport { createSet } from './utils';\nimport countLines from './vendor/metro/countLines';\n\nconst DEFAULT_OPTIONS_FILE_NAME = 'sentry.options.json';\n\n/**\n * Loads Sentry options from a file in\n */\nexport function withSentryOptionsFromFile(config: MetroConfig, optionsFile: string | boolean): MetroConfig {\n if (optionsFile === false) {\n return config;\n }\n\n const { projectRoot } = config;\n if (!projectRoot) {\n // oxlint-disable-next-line eslint(no-console)\n console.error('[@sentry/react-native/metro] Project root is required to load Sentry options from a file');\n return config;\n }\n\n let optionsPath = path.join(projectRoot, DEFAULT_OPTIONS_FILE_NAME);\n if (typeof optionsFile === 'string' && path.isAbsolute(optionsFile)) {\n optionsPath = optionsFile;\n } else if (typeof optionsFile === 'string') {\n optionsPath = path.join(projectRoot, optionsFile);\n }\n\n const originalSerializer = config.serializer?.customSerializer;\n if (!originalSerializer) {\n // It's okay to bail here because we don't expose this for direct usage, but as part of `withSentryConfig`\n // If used directly in RN, the user is responsible for providing a custom serializer first, Expo provides serializer in default config\n // oxlint-disable-next-line eslint(no-console)\n console.error(\n '[@sentry/react-native/metro] `config.serializer.customSerializer` is required to load Sentry options from a file',\n );\n return config;\n }\n\n const sentryOptionsSerializer: MetroCustomSerializer = (\n entryPoint: string,\n preModules: readonly Module[],\n graph: ReadOnlyGraph,\n options: SerializerOptions,\n ) => {\n const sentryOptionsModule = createSentryOptionsModule(optionsPath);\n if (sentryOptionsModule) {\n (preModules as Module[]).push(sentryOptionsModule);\n }\n return originalSerializer(entryPoint, preModules, graph, options);\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: sentryOptionsSerializer,\n },\n };\n}\n\nfunction createSentryOptionsModule(filePath: string): Module<VirtualJSOutput> | null {\n let content: string;\n try {\n content = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n logger.debug(`[@sentry/react-native/metro] Sentry options file does not exist at ${filePath}`);\n } else {\n logger.error(`[@sentry/react-native/metro] Failed to read Sentry options file at ${filePath}`);\n }\n return null;\n }\n\n let parsedContent: Record<string, unknown>;\n try {\n parsedContent = JSON.parse(content);\n } catch (error) {\n logger.error(`[@sentry/react-native/metro] Failed to parse Sentry options file at ${filePath}`);\n return null;\n }\n\n const minifiedContent = JSON.stringify(parsedContent);\n const optionsCode = `var __SENTRY_OPTIONS__=${minifiedContent};`;\n\n logger.debug(`[@sentry/react-native/metro] Sentry options added to the bundle from file at ${filePath}`);\n return {\n dependencies: new Map(),\n getSource: () => Buffer.from(optionsCode),\n inverseDependencies: createSet(),\n path: '__sentry-options__',\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: optionsCode,\n lineCount: countLines(optionsCode),\n map: [],\n },\n },\n ],\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sentryReleaseInjector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,8BAA8B,GACxC,aAAa,MAAM,MACnB,uBAAuB;IAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,EAmB7G,CAAC"}
1
+ {"version":3,"file":"sentryReleaseInjector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQhE;;GAEG;AACH,eAAO,MAAM,8BAA8B,GACxC,aAAa,MAAM,MACnB,uBAAuB;IAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,EAmB7G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sentryReleaseInjector.js","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":";;;AAGA,mCAA8E;AAE9E,MAAM,6BAA6B,GAAG,4BAA4B,CAAC;AAEnE;;GAEG;AACI,MAAM,8BAA8B,GACzC,CAAC,WAAmB,EAAE,EAAE,CACxB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAiF,EAAY,EAAE;IACjH,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,KAAK,KAAK,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAa,EAAC,WAAW,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAA,qBAAa,EAClB,UAAU,EACV,yBAAyB,CAAC;QACxB,IAAI;QACJ,OAAO;KACR,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AArBS,QAAA,8BAA8B,kCAqBvC;AAEJ,SAAS,yBAAyB,CAAC,EACjC,IAAI,EACJ,OAAO,GAIR;IACC,OAAO,IAAA,6BAAqB,EAAC,6BAA6B,EAAE,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,SAAS,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAqC;IACzF,OAAO,6CAA6C,IAAI,gBAAgB,OAAO,KAAK,CAAC;AACvF,CAAC","sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { VirtualJSOutput } from './utils';\nimport { createVirtualJSModule, getExpoConfig, prependModule } from './utils';\n\nconst RELEASE_CONSTANTS_MODULE_PATH = '__sentryReleaseConstants__';\n\n/**\n * Adds Sentry Release constants to the bundle.\n */\nexport const unstableReleaseConstantsPlugin =\n (projectRoot: string) =>\n ({ graph, premodules }: { graph: ReadOnlyGraph<MixedOutput>; premodules: Module[]; debugId?: string }): Module[] => {\n const notWeb = graph.transformOptions.platform !== 'web';\n if (notWeb) {\n return premodules;\n }\n\n const { name, version } = getExpoConfig(projectRoot);\n\n if (!name || !version) {\n return premodules;\n }\n\n return prependModule(\n premodules,\n createSentryReleaseModule({\n name,\n version,\n }),\n );\n };\n\nfunction createSentryReleaseModule({\n name,\n version,\n}: {\n name: string;\n version: string;\n}): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(RELEASE_CONSTANTS_MODULE_PATH, createReleaseConstantsSnippet({ name, version }));\n}\n\nfunction createReleaseConstantsSnippet({ name, version }: { name: string; version: string }): string {\n return `var SENTRY_RELEASE;SENTRY_RELEASE={name: \"${name}\", version: \"${version}\"};`;\n}\n"]}
1
+ {"version":3,"file":"sentryReleaseInjector.js","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":";;;AAIA,mCAA8E;AAE9E,MAAM,6BAA6B,GAAG,4BAA4B,CAAC;AAEnE;;GAEG;AACI,MAAM,8BAA8B,GACzC,CAAC,WAAmB,EAAE,EAAE,CACxB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAiF,EAAY,EAAE;IACjH,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,KAAK,KAAK,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAa,EAAC,WAAW,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAA,qBAAa,EAClB,UAAU,EACV,yBAAyB,CAAC;QACxB,IAAI;QACJ,OAAO;KACR,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AArBS,QAAA,8BAA8B,kCAqBvC;AAEJ,SAAS,yBAAyB,CAAC,EACjC,IAAI,EACJ,OAAO,GAIR;IACC,OAAO,IAAA,6BAAqB,EAAC,6BAA6B,EAAE,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,SAAS,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAqC;IACzF,OAAO,6CAA6C,IAAI,gBAAgB,OAAO,KAAK,CAAC;AACvF,CAAC","sourcesContent":["import type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\n\nimport type { VirtualJSOutput } from './utils';\n\nimport { createVirtualJSModule, getExpoConfig, prependModule } from './utils';\n\nconst RELEASE_CONSTANTS_MODULE_PATH = '__sentryReleaseConstants__';\n\n/**\n * Adds Sentry Release constants to the bundle.\n */\nexport const unstableReleaseConstantsPlugin =\n (projectRoot: string) =>\n ({ graph, premodules }: { graph: ReadOnlyGraph<MixedOutput>; premodules: Module[]; debugId?: string }): Module[] => {\n const notWeb = graph.transformOptions.platform !== 'web';\n if (notWeb) {\n return premodules;\n }\n\n const { name, version } = getExpoConfig(projectRoot);\n\n if (!name || !version) {\n return premodules;\n }\n\n return prependModule(\n premodules,\n createSentryReleaseModule({\n name,\n version,\n }),\n );\n };\n\nfunction createSentryReleaseModule({\n name,\n version,\n}: {\n name: string;\n version: string;\n}): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(RELEASE_CONSTANTS_MODULE_PATH, createReleaseConstantsSnippet({ name, version }));\n}\n\nfunction createReleaseConstantsSnippet({ name, version }: { name: string; version: string }): string {\n return `var SENTRY_RELEASE;SENTRY_RELEASE={name: \"${name}\", version: \"${version}\"};`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAGzD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;AAIlH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,CAAC;KACT,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,GAAG,kCAAkC,KAC5D,qBAAqB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAahD;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjF;AAiDD,eAAO,MAAM,SAAS,QA1Cc,WAAW,CAAC,MAAM,CA0CV,CAAC;AAI7C;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,CAAC,WAAW,CAAC,EAAE,EACvC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,GAC9B,MAAM,CAAC,WAAW,CAAC,EAAE,CAUvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,eAAe,CAAC,GAAG;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAkBD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAMzD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;AAIlH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,CAAC;KACT,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,GAAG,kCAAkC,KAC5D,qBAAqB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAahD;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjF;AA+CD,eAAO,MAAM,SAAS,QAxCc,WAAW,CAAC,MAAM,CAwCV,CAAC;AAI7C;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,CAAC,WAAW,CAAC,EAAE,EACvC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,GAC9B,MAAM,CAAC,WAAW,CAAC,EAAE,CAUvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,eAAe,CAAC,GAAG;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAiBD"}
@@ -64,7 +64,6 @@ function resolveSetCreator() {
64
64
  */
65
65
  function safeRequireCountingSetFromSrc() {
66
66
  try {
67
- // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies
68
67
  return require('metro/src/lib/CountingSet');
69
68
  }
70
69
  catch (e) {
@@ -78,7 +77,6 @@ function safeRequireCountingSetFromSrc() {
78
77
  */
79
78
  function safeRequireCountingSetFromPrivate() {
80
79
  try {
81
- // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies
82
80
  return require('metro/private/lib/CountingSet');
83
81
  }
84
82
  catch (e) {
@@ -133,7 +131,6 @@ function createVirtualJSModule(modulePath, moduleCode) {
133
131
  */
134
132
  function getExpoConfig(projectRoot) {
135
133
  try {
136
- // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies
137
134
  const expoConfig = require('@expo/config');
138
135
  if (expoConfig.getConfig) {
139
136
  const { exp } = expoConfig.getConfig(projectRoot);