@sentry/react-native 6.10.0 → 6.11.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 (131) hide show
  1. package/RNSentry.podspec +1 -1
  2. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +43 -21
  3. package/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java +82 -51
  4. package/android/src/main/java/io/sentry/react/RNSentryTimeToDisplay.java +37 -0
  5. package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
  6. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +10 -0
  7. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +16 -6
  8. package/dist/js/NativeRNSentry.d.ts +2 -0
  9. package/dist/js/NativeRNSentry.d.ts.map +1 -1
  10. package/dist/js/NativeRNSentry.js.map +1 -1
  11. package/dist/js/index.d.ts +1 -1
  12. package/dist/js/index.d.ts.map +1 -1
  13. package/dist/js/index.js +1 -1
  14. package/dist/js/index.js.map +1 -1
  15. package/dist/js/integrations/appRegistry.d.ts +8 -0
  16. package/dist/js/integrations/appRegistry.d.ts.map +1 -0
  17. package/dist/js/integrations/appRegistry.js +43 -0
  18. package/dist/js/integrations/appRegistry.js.map +1 -0
  19. package/dist/js/integrations/default.d.ts.map +1 -1
  20. package/dist/js/integrations/default.js +5 -1
  21. package/dist/js/integrations/default.js.map +1 -1
  22. package/dist/js/integrations/exports.d.ts +2 -0
  23. package/dist/js/integrations/exports.d.ts.map +1 -1
  24. package/dist/js/integrations/exports.js +2 -0
  25. package/dist/js/integrations/exports.js.map +1 -1
  26. package/dist/js/profiling/integration.d.ts.map +1 -1
  27. package/dist/js/profiling/integration.js +2 -3
  28. package/dist/js/profiling/integration.js.map +1 -1
  29. package/dist/js/profiling/nativeTypes.d.ts +1 -1
  30. package/dist/js/profiling/nativeTypes.d.ts.map +1 -1
  31. package/dist/js/profiling/nativeTypes.js.map +1 -1
  32. package/dist/js/replay/CustomMask.d.ts.map +1 -1
  33. package/dist/js/replay/CustomMask.js +3 -2
  34. package/dist/js/replay/CustomMask.js.map +1 -1
  35. package/dist/js/tracing/integrations/appStart.d.ts.map +1 -1
  36. package/dist/js/tracing/integrations/appStart.js +38 -7
  37. package/dist/js/tracing/integrations/appStart.js.map +1 -1
  38. package/dist/js/tracing/integrations/timeToDisplayIntegration.d.ts +4 -0
  39. package/dist/js/tracing/integrations/timeToDisplayIntegration.d.ts.map +1 -0
  40. package/dist/js/tracing/integrations/timeToDisplayIntegration.js +193 -0
  41. package/dist/js/tracing/integrations/timeToDisplayIntegration.js.map +1 -0
  42. package/dist/js/tracing/ops.d.ts +2 -0
  43. package/dist/js/tracing/ops.d.ts.map +1 -1
  44. package/dist/js/tracing/ops.js +2 -0
  45. package/dist/js/tracing/ops.js.map +1 -1
  46. package/dist/js/tracing/reactnativeprofiler.d.ts.map +1 -1
  47. package/dist/js/tracing/reactnativeprofiler.js +12 -1
  48. package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
  49. package/dist/js/tracing/reactnavigation.d.ts +20 -2
  50. package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
  51. package/dist/js/tracing/reactnavigation.js +68 -40
  52. package/dist/js/tracing/reactnavigation.js.map +1 -1
  53. package/dist/js/tracing/semanticAttributes.d.ts +2 -0
  54. package/dist/js/tracing/semanticAttributes.d.ts.map +1 -1
  55. package/dist/js/tracing/semanticAttributes.js +2 -0
  56. package/dist/js/tracing/semanticAttributes.js.map +1 -1
  57. package/dist/js/tracing/timeToDisplayFallback.d.ts +3 -0
  58. package/dist/js/tracing/timeToDisplayFallback.d.ts.map +1 -0
  59. package/dist/js/tracing/timeToDisplayFallback.js +21 -0
  60. package/dist/js/tracing/timeToDisplayFallback.js.map +1 -0
  61. package/dist/js/tracing/timetodisplay.d.ts +29 -0
  62. package/dist/js/tracing/timetodisplay.d.ts.map +1 -1
  63. package/dist/js/tracing/timetodisplay.js +43 -20
  64. package/dist/js/tracing/timetodisplay.js.map +1 -1
  65. package/dist/js/tracing/timetodisplaynative.d.ts.map +1 -1
  66. package/dist/js/tracing/timetodisplaynative.js +2 -1
  67. package/dist/js/tracing/timetodisplaynative.js.map +1 -1
  68. package/dist/js/tracing/timetodisplaynative.types.d.ts +1 -3
  69. package/dist/js/tracing/timetodisplaynative.types.d.ts.map +1 -1
  70. package/dist/js/tracing/timetodisplaynative.types.js.map +1 -1
  71. package/dist/js/utils/rnlibraries.d.ts +1 -1
  72. package/dist/js/utils/rnlibraries.d.ts.map +1 -1
  73. package/dist/js/utils/rnlibraries.js +5 -3
  74. package/dist/js/utils/rnlibraries.js.map +1 -1
  75. package/dist/js/utils/rnlibrariesinterface.d.ts +1 -0
  76. package/dist/js/utils/rnlibrariesinterface.d.ts.map +1 -1
  77. package/dist/js/utils/rnlibrariesinterface.js.map +1 -1
  78. package/dist/js/vendor/react-native/index.d.ts +3 -0
  79. package/dist/js/vendor/react-native/index.d.ts.map +1 -1
  80. package/dist/js/vendor/react-native/index.js.map +1 -1
  81. package/dist/js/vendor/react-navigation/types.d.ts +27 -0
  82. package/dist/js/vendor/react-navigation/types.d.ts.map +1 -0
  83. package/dist/js/vendor/react-navigation/types.js +3 -0
  84. package/dist/js/vendor/react-navigation/types.js.map +1 -0
  85. package/dist/js/version.d.ts +1 -1
  86. package/dist/js/version.js +1 -1
  87. package/dist/js/version.js.map +1 -1
  88. package/dist/js/wrapper.d.ts +2 -0
  89. package/dist/js/wrapper.d.ts.map +1 -1
  90. package/dist/js/wrapper.js +24 -0
  91. package/dist/js/wrapper.js.map +1 -1
  92. package/ios/RNSentry.mm +15 -6
  93. package/ios/RNSentryFramesTrackerListener.h +7 -3
  94. package/ios/RNSentryOnDrawReporter.h +6 -2
  95. package/ios/RNSentryOnDrawReporter.m +47 -20
  96. package/ios/RNSentryTimeToDisplay.h +7 -0
  97. package/ios/RNSentryTimeToDisplay.m +69 -2
  98. package/ios/RNSentryVersion.m +1 -1
  99. package/package.json +4 -4
  100. package/scripts/sentry-xcode-debug-files.sh +1 -4
  101. package/scripts/sentry-xcode.sh +6 -4
  102. package/sentry.gradle +4 -2
  103. package/src/js/NativeRNSentry.ts +2 -0
  104. package/ts3.8/dist/js/NativeRNSentry.d.ts +2 -0
  105. package/ts3.8/dist/js/index.d.ts +1 -1
  106. package/ts3.8/dist/js/integrations/appRegistry.d.ts +8 -0
  107. package/ts3.8/dist/js/integrations/exports.d.ts +2 -0
  108. package/ts3.8/dist/js/profiling/nativeTypes.d.ts +1 -1
  109. package/ts3.8/dist/js/tracing/integrations/timeToDisplayIntegration.d.ts +4 -0
  110. package/ts3.8/dist/js/tracing/ops.d.ts +2 -0
  111. package/ts3.8/dist/js/tracing/reactnavigation.d.ts +20 -2
  112. package/ts3.8/dist/js/tracing/semanticAttributes.d.ts +2 -0
  113. package/ts3.8/dist/js/tracing/timeToDisplayFallback.d.ts +3 -0
  114. package/ts3.8/dist/js/tracing/timetodisplay.d.ts +29 -0
  115. package/ts3.8/dist/js/tracing/timetodisplaynative.types.d.ts +1 -3
  116. package/ts3.8/dist/js/utils/rnlibraries.d.ts +1 -1
  117. package/ts3.8/dist/js/utils/rnlibrariesinterface.d.ts +1 -0
  118. package/ts3.8/dist/js/vendor/react-native/index.d.ts +3 -0
  119. package/ts3.8/dist/js/vendor/react-navigation/types.d.ts +27 -0
  120. package/ts3.8/dist/js/version.d.ts +1 -1
  121. package/ts3.8/dist/js/wrapper.d.ts +2 -0
  122. package/dist/js/utils/sentryeventemitter.d.ts +0 -24
  123. package/dist/js/utils/sentryeventemitter.d.ts.map +0 -1
  124. package/dist/js/utils/sentryeventemitter.js +0 -82
  125. package/dist/js/utils/sentryeventemitter.js.map +0 -1
  126. package/dist/js/utils/sentryeventemitterfallback.d.ts +0 -19
  127. package/dist/js/utils/sentryeventemitterfallback.d.ts.map +0 -1
  128. package/dist/js/utils/sentryeventemitterfallback.js +0 -78
  129. package/dist/js/utils/sentryeventemitterfallback.js.map +0 -1
  130. package/ts3.8/dist/js/utils/sentryeventemitter.d.ts +0 -24
  131. package/ts3.8/dist/js/utils/sentryeventemitterfallback.d.ts +0 -19
@@ -1,78 +0,0 @@
1
- import { logger, timestampInSeconds } from '@sentry/core';
2
- import { NATIVE } from '../wrapper';
3
- import { createSentryEventEmitter, NewFrameEventName } from './sentryeventemitter';
4
- export const FALLBACK_TIMEOUT_MS = 10000;
5
- /**
6
- * Creates emitter that allows to listen to UI Frame events when ready.
7
- */
8
- export function createSentryFallbackEventEmitter(emitter = createSentryEventEmitter(), fallbackTimeoutMs = FALLBACK_TIMEOUT_MS) {
9
- let fallbackTimeout;
10
- let animationFrameTimestampSeconds;
11
- let nativeNewFrameTimestampSeconds;
12
- function getAnimationFrameTimestampSeconds() {
13
- // https://reactnative.dev/docs/timers#timers
14
- // NOTE: The current implementation of requestAnimationFrame is the same
15
- // as setTimeout(0). This isn't exactly how requestAnimationFrame
16
- // is supposed to work on web, so it doesn't get called when UI Frames are rendered.: https://github.com/facebook/react-native/blob/5106933c750fee2ce49fe1945c3e3763eebc92bc/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp#L442-L443
17
- requestAnimationFrame(() => {
18
- if (fallbackTimeout === undefined) {
19
- return;
20
- }
21
- animationFrameTimestampSeconds = timestampInSeconds();
22
- });
23
- }
24
- function getNativeNewFrameTimestampSeconds() {
25
- NATIVE.getNewScreenTimeToDisplay()
26
- .then(resolve => {
27
- if (fallbackTimeout === undefined) {
28
- return;
29
- }
30
- nativeNewFrameTimestampSeconds = resolve !== null && resolve !== void 0 ? resolve : undefined;
31
- })
32
- .catch(reason => {
33
- logger.error('Failed to receive Native fallback timestamp.', reason);
34
- });
35
- }
36
- return {
37
- initAsync() {
38
- emitter.initAsync(NewFrameEventName);
39
- },
40
- onceNewFrame(listener) {
41
- animationFrameTimestampSeconds = undefined;
42
- nativeNewFrameTimestampSeconds = undefined;
43
- const internalListener = (event) => {
44
- if (fallbackTimeout !== undefined) {
45
- clearTimeout(fallbackTimeout);
46
- fallbackTimeout = undefined;
47
- }
48
- animationFrameTimestampSeconds = undefined;
49
- nativeNewFrameTimestampSeconds = undefined;
50
- listener(event);
51
- };
52
- fallbackTimeout = setTimeout(() => {
53
- if (nativeNewFrameTimestampSeconds) {
54
- logger.log('Native event emitter did not reply in time');
55
- return listener({
56
- newFrameTimestampInSeconds: nativeNewFrameTimestampSeconds,
57
- isFallback: true,
58
- });
59
- }
60
- else if (animationFrameTimestampSeconds) {
61
- logger.log('[Sentry] Native event emitter did not reply in time. Using JavaScript fallback emitter.');
62
- return listener({
63
- newFrameTimestampInSeconds: animationFrameTimestampSeconds,
64
- isFallback: true,
65
- });
66
- }
67
- else {
68
- emitter.removeListener(NewFrameEventName, internalListener);
69
- logger.error('Failed to receive any fallback timestamp.');
70
- }
71
- }, fallbackTimeoutMs);
72
- getNativeNewFrameTimestampSeconds();
73
- getAnimationFrameTimestampSeconds();
74
- emitter.once(NewFrameEventName, internalListener);
75
- },
76
- };
77
- }
78
- //# sourceMappingURL=sentryeventemitterfallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentryeventemitterfallback.js","sourceRoot":"","sources":["../../../src/js/utils/sentryeventemitterfallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAM,CAAC;AAY1C;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,UAA8B,wBAAwB,EAAE,EACxD,iBAAiB,GAAG,mBAAmB;IAEvC,IAAI,eAA0D,CAAC;IAC/D,IAAI,8BAAkD,CAAC;IACvD,IAAI,8BAAkD,CAAC;IAEvD,SAAS,iCAAiC;QACxC,6CAA6C;QAC7C,wEAAwE;QACxE,iEAAiE;QACjE,uPAAuP;QACvP,qBAAqB,CAAC,GAAG,EAAE;YACzB,IAAI,eAAe,KAAK,SAAS,EAAE;gBACjC,OAAO;aACR;YACD,8BAA8B,GAAG,kBAAkB,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,iCAAiC;QACxC,MAAM,CAAC,yBAAyB,EAAE;aAC/B,IAAI,CAAC,OAAO,CAAC,EAAE;YACd,IAAI,eAAe,KAAK,SAAS,EAAE;gBACjC,OAAO;aACR;YACD,8BAA8B,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,SAAS,CAAC;QACxD,CAAC,CAAC;aACD,KAAK,CAAC,MAAM,CAAC,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACL,SAAS;YACP,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QAED,YAAY,CAAC,QAAgD;YAC3D,8BAA8B,GAAG,SAAS,CAAC;YAC3C,8BAA8B,GAAG,SAAS,CAAC;YAE3C,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAQ,EAAE;gBACtD,IAAI,eAAe,KAAK,SAAS,EAAE;oBACjC,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC9B,eAAe,GAAG,SAAS,CAAC;iBAC7B;gBACD,8BAA8B,GAAG,SAAS,CAAC;gBAC3C,8BAA8B,GAAG,SAAS,CAAC;gBAC3C,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,8BAA8B,EAAE;oBAClC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;oBACzD,OAAO,QAAQ,CAAC;wBACd,0BAA0B,EAAE,8BAA8B;wBAC1D,UAAU,EAAE,IAAI;qBACjB,CAAC,CAAC;iBACJ;qBAAM,IAAI,8BAA8B,EAAE;oBACzC,MAAM,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;oBACtG,OAAO,QAAQ,CAAC;wBACd,0BAA0B,EAAE,8BAA8B;wBAC1D,UAAU,EAAE,IAAI;qBACjB,CAAC,CAAC;iBACJ;qBAAM;oBACL,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;oBAC5D,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;iBAC3D;YACH,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAEtB,iCAAiC,EAAE,CAAC;YACpC,iCAAiC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { logger, timestampInSeconds } from '@sentry/core';\n\nimport { NATIVE } from '../wrapper';\nimport type { NewFrameEvent, SentryEventEmitter } from './sentryeventemitter';\nimport { createSentryEventEmitter, NewFrameEventName } from './sentryeventemitter';\n\nexport const FALLBACK_TIMEOUT_MS = 10_000;\n\nexport type FallBackNewFrameEvent = { newFrameTimestampInSeconds: number; isFallback?: boolean };\nexport interface SentryEventEmitterFallback {\n /**\n * Initializes the fallback event emitter\n * This method is synchronous in JS but the event emitter starts asynchronously.\n */\n initAsync: () => void;\n onceNewFrame: (listener: (event: FallBackNewFrameEvent) => void) => void;\n}\n\n/**\n * Creates emitter that allows to listen to UI Frame events when ready.\n */\nexport function createSentryFallbackEventEmitter(\n emitter: SentryEventEmitter = createSentryEventEmitter(),\n fallbackTimeoutMs = FALLBACK_TIMEOUT_MS,\n): SentryEventEmitterFallback {\n let fallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n let animationFrameTimestampSeconds: number | undefined;\n let nativeNewFrameTimestampSeconds: number | undefined;\n\n function getAnimationFrameTimestampSeconds(): void {\n // https://reactnative.dev/docs/timers#timers\n // NOTE: The current implementation of requestAnimationFrame is the same\n // as setTimeout(0). This isn't exactly how requestAnimationFrame\n // is supposed to work on web, so it doesn't get called when UI Frames are rendered.: https://github.com/facebook/react-native/blob/5106933c750fee2ce49fe1945c3e3763eebc92bc/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp#L442-L443\n requestAnimationFrame(() => {\n if (fallbackTimeout === undefined) {\n return;\n }\n animationFrameTimestampSeconds = timestampInSeconds();\n });\n }\n\n function getNativeNewFrameTimestampSeconds(): void {\n NATIVE.getNewScreenTimeToDisplay()\n .then(resolve => {\n if (fallbackTimeout === undefined) {\n return;\n }\n nativeNewFrameTimestampSeconds = resolve ?? undefined;\n })\n .catch(reason => {\n logger.error('Failed to receive Native fallback timestamp.', reason);\n });\n }\n\n return {\n initAsync() {\n emitter.initAsync(NewFrameEventName);\n },\n\n onceNewFrame(listener: (event: FallBackNewFrameEvent) => void) {\n animationFrameTimestampSeconds = undefined;\n nativeNewFrameTimestampSeconds = undefined;\n\n const internalListener = (event: NewFrameEvent): void => {\n if (fallbackTimeout !== undefined) {\n clearTimeout(fallbackTimeout);\n fallbackTimeout = undefined;\n }\n animationFrameTimestampSeconds = undefined;\n nativeNewFrameTimestampSeconds = undefined;\n listener(event);\n };\n fallbackTimeout = setTimeout(() => {\n if (nativeNewFrameTimestampSeconds) {\n logger.log('Native event emitter did not reply in time');\n return listener({\n newFrameTimestampInSeconds: nativeNewFrameTimestampSeconds,\n isFallback: true,\n });\n } else if (animationFrameTimestampSeconds) {\n logger.log('[Sentry] Native event emitter did not reply in time. Using JavaScript fallback emitter.');\n return listener({\n newFrameTimestampInSeconds: animationFrameTimestampSeconds,\n isFallback: true,\n });\n } else {\n emitter.removeListener(NewFrameEventName, internalListener);\n logger.error('Failed to receive any fallback timestamp.');\n }\n }, fallbackTimeoutMs);\n\n getNativeNewFrameTimestampSeconds();\n getAnimationFrameTimestampSeconds();\n emitter.once(NewFrameEventName, internalListener);\n },\n };\n}\n"]}
@@ -1,24 +0,0 @@
1
- import type { NativeModule } from 'react-native';
2
- import { NativeEventEmitter } from 'react-native';
3
- export declare const NewFrameEventName = "rn_sentry_new_frame";
4
- export type NewFrameEventName = typeof NewFrameEventName;
5
- export type NewFrameEvent = {
6
- newFrameTimestampInSeconds: number;
7
- };
8
- export interface SentryEventEmitter {
9
- /**
10
- * Initializes the native event emitter
11
- * This method is synchronous in JS but the native event emitter starts asynchronously
12
- * https://github.com/facebook/react-native/blob/d09c02f9e2d468e4d0bde51890e312ae7003a3e6/packages/react-native/React/Modules/RCTEventEmitter.m#L95
13
- */
14
- initAsync: (eventType: NewFrameEventName) => void;
15
- closeAllAsync: () => void;
16
- addListener: (eventType: NewFrameEventName, listener: (event: NewFrameEvent) => void) => void;
17
- removeListener: (eventType: NewFrameEventName, listener: (event: NewFrameEvent) => void) => void;
18
- once: (eventType: NewFrameEventName, listener: (event: NewFrameEvent) => void) => void;
19
- }
20
- /**
21
- * Creates emitter that allows to listen to native RNSentry events
22
- */
23
- export declare function createSentryEventEmitter(sentryNativeModule?: NativeModule | undefined, createNativeEventEmitter?: (nativeModule: NativeModule | undefined) => NativeEventEmitter): SentryEventEmitter;
24
- //# sourceMappingURL=sentryeventemitter.d.ts.map
@@ -1,19 +0,0 @@
1
- import type { SentryEventEmitter } from './sentryeventemitter';
2
- export declare const FALLBACK_TIMEOUT_MS = 10000;
3
- export type FallBackNewFrameEvent = {
4
- newFrameTimestampInSeconds: number;
5
- isFallback?: boolean;
6
- };
7
- export interface SentryEventEmitterFallback {
8
- /**
9
- * Initializes the fallback event emitter
10
- * This method is synchronous in JS but the event emitter starts asynchronously.
11
- */
12
- initAsync: () => void;
13
- onceNewFrame: (listener: (event: FallBackNewFrameEvent) => void) => void;
14
- }
15
- /**
16
- * Creates emitter that allows to listen to UI Frame events when ready.
17
- */
18
- export declare function createSentryFallbackEventEmitter(emitter?: SentryEventEmitter, fallbackTimeoutMs?: number): SentryEventEmitterFallback;
19
- //# sourceMappingURL=sentryeventemitterfallback.d.ts.map