@sentry/react-native 6.0.0-rc.0 → 6.0.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 (32) hide show
  1. package/README.md +8 -0
  2. package/RNSentry.podspec +1 -1
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/io/sentry/react/RNSentryBreadcrumb.java +63 -66
  5. package/android/src/main/java/io/sentry/react/RNSentryMapConverter.java +106 -110
  6. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +867 -811
  7. package/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java +128 -121
  8. package/android/src/main/java/io/sentry/react/RNSentryPackage.java +8 -14
  9. package/android/src/main/java/io/sentry/react/RNSentryReactFragmentLifecycleTracer.java +76 -70
  10. package/android/src/main/java/io/sentry/react/RNSentryReplayBreadcrumbConverter.java +26 -31
  11. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +164 -165
  12. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +164 -165
  13. package/dist/js/integrations/nativelinkederrors.js +7 -2
  14. package/dist/js/integrations/nativelinkederrors.js.map +1 -1
  15. package/dist/js/tracing/timetodisplay.d.ts +0 -1
  16. package/dist/js/tracing/timetodisplay.d.ts.map +1 -1
  17. package/dist/js/tracing/timetodisplay.js +3 -1
  18. package/dist/js/tracing/timetodisplay.js.map +1 -1
  19. package/dist/js/version.d.ts +1 -1
  20. package/dist/js/version.d.ts.map +1 -1
  21. package/dist/js/version.js +1 -1
  22. package/dist/js/version.js.map +1 -1
  23. package/dist/js/wrapper.d.ts +1 -1
  24. package/dist/js/wrapper.d.ts.map +1 -1
  25. package/dist/js/wrapper.js +37 -5
  26. package/dist/js/wrapper.js.map +1 -1
  27. package/ios/RNSentry.mm +12 -2
  28. package/package.json +10 -10
  29. package/sentry.gradle +3 -6
  30. package/ts3.8/dist/js/tracing/timetodisplay.d.ts +0 -1
  31. package/ts3.8/dist/js/version.d.ts +1 -1
  32. package/ts3.8/dist/js/wrapper.d.ts +1 -1
package/README.md CHANGED
@@ -19,6 +19,14 @@ _Bad software is everywhere, and we're tired of it. Sentry is on a mission to he
19
19
  [![Discord Chat](https://img.shields.io/discord/621778831602221064?logo=discord&logoColor=ffffff&color=7389D8)](https://discord.gg/PXa5Apfe7K)
20
20
  [![Runs with Expo](https://img.shields.io/badge/Runs%20with%20Expo-4630EB.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/)
21
21
 
22
+ ## Releases
23
+
24
+ This repo uses the following ways to release SDK updates:
25
+
26
+ - `Pre-release`: We create pre-releases (alpha, beta, RC,…) for larger and potentially more impactful changes, such as new features or major versions.
27
+ - `Latest`: We continuously release major/minor/hotfix versions from the `main` branch. These releases go through all our internal quality gates and are very safe to use and intended to be the default for most teams.
28
+ - `Stable`: We promote releases from `Latest` when they have been used in the field for some time and in scale, considering time since release, adoption, and other quality and stability metrics. These releases will be indicated on [the releases page](https://github.com/getsentry/sentry-react-native/releases/) with the `Stable` suffix.
29
+
22
30
  ## Requirements
23
31
 
24
32
  - `react-native >= 0.65.0`
package/RNSentry.podspec CHANGED
@@ -37,7 +37,7 @@ Pod::Spec.new do |s|
37
37
 
38
38
  s.compiler_flags = other_cflags
39
39
 
40
- s.dependency 'Sentry/HybridSDK', '8.36.0'
40
+ s.dependency 'Sentry/HybridSDK', '8.37.0'
41
41
 
42
42
  if defined? install_modules_dependencies
43
43
  # Default React Native dependencies for 0.71 and above (new and legacy architecture)
@@ -54,5 +54,5 @@ android {
54
54
 
55
55
  dependencies {
56
56
  implementation 'com.facebook.react:react-native:+'
57
- api 'io.sentry:sentry-android:7.14.0'
57
+ api 'io.sentry:sentry-android:7.15.0'
58
58
  }
@@ -1,87 +1,84 @@
1
1
  package io.sentry.react;
2
2
 
3
3
  import com.facebook.react.bridge.ReadableMap;
4
-
5
- import org.jetbrains.annotations.NotNull;
6
- import org.jetbrains.annotations.Nullable;
7
-
8
- import java.util.Map;
9
-
10
4
  import io.sentry.Breadcrumb;
11
5
  import io.sentry.SentryLevel;
6
+ import java.util.Map;
7
+ import org.jetbrains.annotations.NotNull;
8
+ import org.jetbrains.annotations.Nullable;
12
9
 
13
10
  public class RNSentryBreadcrumb {
14
11
 
15
- @Nullable
16
- public static String getCurrentScreenFrom(ReadableMap from) {
17
- final @Nullable String maybeCategory = from.hasKey("category") ? from.getString("category") : null;
18
- if (maybeCategory == null || !maybeCategory.equals("navigation")) {
19
- return null;
20
- }
21
-
22
- final @Nullable ReadableMap maybeData = from.hasKey("data") ? from.getMap("data") : null;
23
- if (maybeData == null) {
24
- return null;
25
- }
12
+ @Nullable
13
+ public static String getCurrentScreenFrom(ReadableMap from) {
14
+ final @Nullable String maybeCategory =
15
+ from.hasKey("category") ? from.getString("category") : null;
16
+ if (maybeCategory == null || !maybeCategory.equals("navigation")) {
17
+ return null;
18
+ }
26
19
 
27
- try {
28
- // getString might throw if cast to string fails (data.to is not enforced by TS to be a string)
29
- return maybeData.hasKey("to") ? maybeData.getString("to") : null;
30
- } catch (Throwable exception) {
31
- return null;
32
- }
20
+ final @Nullable ReadableMap maybeData = from.hasKey("data") ? from.getMap("data") : null;
21
+ if (maybeData == null) {
22
+ return null;
33
23
  }
34
24
 
35
- @NotNull
36
- public static Breadcrumb fromMap(ReadableMap from) {
37
- final @NotNull Breadcrumb breadcrumb = new Breadcrumb();
25
+ try {
26
+ // getString might throw if cast to string fails (data.to is not enforced by TS to be a
27
+ // string)
28
+ return maybeData.hasKey("to") ? maybeData.getString("to") : null;
29
+ } catch (Throwable exception) {
30
+ return null;
31
+ }
32
+ }
38
33
 
39
- if (from.hasKey("message")) {
40
- breadcrumb.setMessage(from.getString("message"));
41
- }
34
+ @NotNull
35
+ public static Breadcrumb fromMap(ReadableMap from) {
36
+ final @NotNull Breadcrumb breadcrumb = new Breadcrumb();
42
37
 
43
- if (from.hasKey("type")) {
44
- breadcrumb.setType(from.getString("type"));
45
- }
38
+ if (from.hasKey("message")) {
39
+ breadcrumb.setMessage(from.getString("message"));
40
+ }
46
41
 
47
- if (from.hasKey("category")) {
48
- breadcrumb.setCategory(from.getString("category"));
49
- }
42
+ if (from.hasKey("type")) {
43
+ breadcrumb.setType(from.getString("type"));
44
+ }
50
45
 
51
- if (from.hasKey("level")) {
52
- switch (from.getString("level")) {
53
- case "fatal":
54
- breadcrumb.setLevel(SentryLevel.FATAL);
55
- break;
56
- case "warning":
57
- breadcrumb.setLevel(SentryLevel.WARNING);
58
- break;
59
- case "debug":
60
- breadcrumb.setLevel(SentryLevel.DEBUG);
61
- break;
62
- case "error":
63
- breadcrumb.setLevel(SentryLevel.ERROR);
64
- break;
65
- case "info":
66
- default:
67
- breadcrumb.setLevel(SentryLevel.INFO);
68
- break;
69
- }
70
- }
46
+ if (from.hasKey("category")) {
47
+ breadcrumb.setCategory(from.getString("category"));
48
+ }
71
49
 
50
+ if (from.hasKey("level")) {
51
+ switch (from.getString("level")) {
52
+ case "fatal":
53
+ breadcrumb.setLevel(SentryLevel.FATAL);
54
+ break;
55
+ case "warning":
56
+ breadcrumb.setLevel(SentryLevel.WARNING);
57
+ break;
58
+ case "debug":
59
+ breadcrumb.setLevel(SentryLevel.DEBUG);
60
+ break;
61
+ case "error":
62
+ breadcrumb.setLevel(SentryLevel.ERROR);
63
+ break;
64
+ case "info":
65
+ default:
66
+ breadcrumb.setLevel(SentryLevel.INFO);
67
+ break;
68
+ }
69
+ }
72
70
 
73
- if (from.hasKey("data")) {
74
- final ReadableMap data = from.getMap("data");
75
- for (final Map.Entry<String, Object> entry : data.toHashMap().entrySet()) {
76
- final Object value = entry.getValue();
77
- // data is ConcurrentHashMap and can't have null values
78
- if (value != null) {
79
- breadcrumb.setData(entry.getKey(), entry.getValue());
80
- }
81
- }
71
+ if (from.hasKey("data")) {
72
+ final ReadableMap data = from.getMap("data");
73
+ for (final Map.Entry<String, Object> entry : data.toHashMap().entrySet()) {
74
+ final Object value = entry.getValue();
75
+ // data is ConcurrentHashMap and can't have null values
76
+ if (value != null) {
77
+ breadcrumb.setData(entry.getKey(), entry.getValue());
82
78
  }
83
-
84
- return breadcrumb;
79
+ }
85
80
  }
86
81
 
82
+ return breadcrumb;
83
+ }
87
84
  }
@@ -5,130 +5,126 @@ import com.facebook.react.bridge.ReadableArray;
5
5
  import com.facebook.react.bridge.ReadableMap;
6
6
  import com.facebook.react.bridge.WritableArray;
7
7
  import com.facebook.react.bridge.WritableMap;
8
-
9
- import org.jetbrains.annotations.Nullable;
10
-
8
+ import io.sentry.ILogger;
9
+ import io.sentry.SentryLevel;
10
+ import io.sentry.android.core.AndroidLogger;
11
11
  import java.math.BigDecimal;
12
12
  import java.math.BigInteger;
13
13
  import java.util.List;
14
14
  import java.util.Map;
15
-
16
- import io.sentry.ILogger;
17
- import io.sentry.SentryLevel;
18
- import io.sentry.android.core.AndroidLogger;
15
+ import org.jetbrains.annotations.Nullable;
19
16
 
20
17
  public class RNSentryMapConverter {
21
- public static final String NAME = "RNSentry.MapConverter";
18
+ public static final String NAME = "RNSentry.MapConverter";
22
19
 
23
- private static final ILogger logger = new AndroidLogger(NAME);
20
+ private static final ILogger logger = new AndroidLogger(NAME);
24
21
 
25
- public static Object convertToWritable(@Nullable Object serialized) {
26
- if (serialized instanceof List) {
27
- WritableArray writable = Arguments.createArray();
28
- for (Object item : (List<?>) serialized) {
29
- addValueToWritableArray(writable, convertToWritable(item));
30
- }
31
- return writable;
32
- } else if (serialized instanceof Map) {
33
- WritableMap writable = Arguments.createMap();
34
- for (Map.Entry<?, ?> entry : ((Map<?, ?>) serialized).entrySet()) {
35
- Object key = entry.getKey();
36
- Object value = entry.getValue();
22
+ public static Object convertToWritable(@Nullable Object serialized) {
23
+ if (serialized instanceof List) {
24
+ WritableArray writable = Arguments.createArray();
25
+ for (Object item : (List<?>) serialized) {
26
+ addValueToWritableArray(writable, convertToWritable(item));
27
+ }
28
+ return writable;
29
+ } else if (serialized instanceof Map) {
30
+ WritableMap writable = Arguments.createMap();
31
+ for (Map.Entry<?, ?> entry : ((Map<?, ?>) serialized).entrySet()) {
32
+ Object key = entry.getKey();
33
+ Object value = entry.getValue();
37
34
 
38
- if (key instanceof String) {
39
- addValueToWritableMap(writable, (String) key, convertToWritable(value));
40
- } else {
41
- logger.log(SentryLevel.ERROR, "Only String keys are supported in Map.", key);
42
- }
43
- }
44
- return writable;
45
- } else if (serialized instanceof Byte) {
46
- return Integer.valueOf((Byte) serialized);
47
- } else if (serialized instanceof Short) {
48
- return Integer.valueOf((Short) serialized);
49
- } else if (serialized instanceof Float) {
50
- return Double.valueOf((Float) serialized);
51
- } else if (serialized instanceof Long) {
52
- return Double.valueOf((Long) serialized);
53
- } else if (serialized instanceof BigInteger) {
54
- return ((BigInteger) serialized).doubleValue();
55
- } else if (serialized instanceof BigDecimal) {
56
- return ((BigDecimal) serialized).doubleValue();
57
- } else if (serialized instanceof Integer
58
- || serialized instanceof Double
59
- || serialized instanceof Boolean
60
- || serialized == null
61
- || serialized instanceof String) {
62
- return serialized;
35
+ if (key instanceof String) {
36
+ addValueToWritableMap(writable, (String) key, convertToWritable(value));
63
37
  } else {
64
- logger.log(SentryLevel.ERROR, "Supplied serialized value could not be converted." + serialized);
65
- return null;
38
+ logger.log(SentryLevel.ERROR, "Only String keys are supported in Map.", key);
66
39
  }
40
+ }
41
+ return writable;
42
+ } else if (serialized instanceof Byte) {
43
+ return Integer.valueOf((Byte) serialized);
44
+ } else if (serialized instanceof Short) {
45
+ return Integer.valueOf((Short) serialized);
46
+ } else if (serialized instanceof Float) {
47
+ return Double.valueOf((Float) serialized);
48
+ } else if (serialized instanceof Long) {
49
+ return Double.valueOf((Long) serialized);
50
+ } else if (serialized instanceof BigInteger) {
51
+ return ((BigInteger) serialized).doubleValue();
52
+ } else if (serialized instanceof BigDecimal) {
53
+ return ((BigDecimal) serialized).doubleValue();
54
+ } else if (serialized instanceof Integer
55
+ || serialized instanceof Double
56
+ || serialized instanceof Boolean
57
+ || serialized == null
58
+ || serialized instanceof String) {
59
+ return serialized;
60
+ } else {
61
+ logger.log(
62
+ SentryLevel.ERROR, "Supplied serialized value could not be converted." + serialized);
63
+ return null;
67
64
  }
65
+ }
68
66
 
69
- private static void addValueToWritableArray(WritableArray writableArray, Object value) {
70
- if (value == null) {
71
- writableArray.pushNull();
72
- } else if (value instanceof Boolean) {
73
- writableArray.pushBoolean((Boolean) value);
74
- } else if (value instanceof Double) {
75
- writableArray.pushDouble((Double) value);
76
- } else if (value instanceof Float) {
77
- writableArray.pushDouble(((Float) value).doubleValue());
78
- } else if (value instanceof Integer) {
79
- writableArray.pushInt((Integer) value);
80
- } else if (value instanceof Short) {
81
- writableArray.pushInt(((Short) value).intValue());
82
- } else if (value instanceof Byte) {
83
- writableArray.pushInt(((Byte) value).intValue());
84
- } else if (value instanceof Long) {
85
- writableArray.pushDouble(((Long) value).doubleValue());
86
- } else if (value instanceof BigInteger) {
87
- writableArray.pushDouble(((BigInteger) value).doubleValue());
88
- } else if (value instanceof BigDecimal) {
89
- writableArray.pushDouble(((BigDecimal) value).doubleValue());
90
- } else if (value instanceof String) {
91
- writableArray.pushString((String) value);
92
- } else if (value instanceof ReadableMap) {
93
- writableArray.pushMap((ReadableMap) value);
94
- } else if (value instanceof ReadableArray) {
95
- writableArray.pushArray((ReadableArray) value);
96
- } else {
97
- logger.log(SentryLevel.ERROR,
98
- "Could not convert object: " + value);
99
- }
67
+ private static void addValueToWritableArray(WritableArray writableArray, Object value) {
68
+ if (value == null) {
69
+ writableArray.pushNull();
70
+ } else if (value instanceof Boolean) {
71
+ writableArray.pushBoolean((Boolean) value);
72
+ } else if (value instanceof Double) {
73
+ writableArray.pushDouble((Double) value);
74
+ } else if (value instanceof Float) {
75
+ writableArray.pushDouble(((Float) value).doubleValue());
76
+ } else if (value instanceof Integer) {
77
+ writableArray.pushInt((Integer) value);
78
+ } else if (value instanceof Short) {
79
+ writableArray.pushInt(((Short) value).intValue());
80
+ } else if (value instanceof Byte) {
81
+ writableArray.pushInt(((Byte) value).intValue());
82
+ } else if (value instanceof Long) {
83
+ writableArray.pushDouble(((Long) value).doubleValue());
84
+ } else if (value instanceof BigInteger) {
85
+ writableArray.pushDouble(((BigInteger) value).doubleValue());
86
+ } else if (value instanceof BigDecimal) {
87
+ writableArray.pushDouble(((BigDecimal) value).doubleValue());
88
+ } else if (value instanceof String) {
89
+ writableArray.pushString((String) value);
90
+ } else if (value instanceof ReadableMap) {
91
+ writableArray.pushMap((ReadableMap) value);
92
+ } else if (value instanceof ReadableArray) {
93
+ writableArray.pushArray((ReadableArray) value);
94
+ } else {
95
+ logger.log(SentryLevel.ERROR, "Could not convert object: " + value);
100
96
  }
97
+ }
101
98
 
102
- private static void addValueToWritableMap(WritableMap writableMap, String key, Object value) {
103
- if (value == null) {
104
- writableMap.putNull(key);
105
- } else if (value instanceof Boolean) {
106
- writableMap.putBoolean(key, (Boolean) value);
107
- } else if (value instanceof Double) {
108
- writableMap.putDouble(key, (Double) value);
109
- } else if (value instanceof Float) {
110
- writableMap.putDouble(key, ((Float) value).doubleValue());
111
- } else if (value instanceof Integer) {
112
- writableMap.putInt(key, (Integer) value);
113
- } else if (value instanceof Short) {
114
- writableMap.putInt(key, ((Short) value).intValue());
115
- } else if (value instanceof Byte) {
116
- writableMap.putInt(key, ((Byte) value).intValue());
117
- } else if (value instanceof Long) {
118
- writableMap.putDouble(key, ((Long) value).doubleValue());
119
- } else if (value instanceof BigInteger) {
120
- writableMap.putDouble(key, ((BigInteger) value).doubleValue());
121
- } else if (value instanceof BigDecimal) {
122
- writableMap.putDouble(key, ((BigDecimal) value).doubleValue());
123
- } else if (value instanceof String) {
124
- writableMap.putString(key, (String) value);
125
- } else if (value instanceof ReadableArray) {
126
- writableMap.putArray(key, (ReadableArray) value);
127
- } else if (value instanceof ReadableMap) {
128
- writableMap.putMap(key, (ReadableMap) value);
129
- } else {
130
- logger.log(SentryLevel.ERROR,
131
- "Could not convert object" + value);
132
- }
99
+ private static void addValueToWritableMap(WritableMap writableMap, String key, Object value) {
100
+ if (value == null) {
101
+ writableMap.putNull(key);
102
+ } else if (value instanceof Boolean) {
103
+ writableMap.putBoolean(key, (Boolean) value);
104
+ } else if (value instanceof Double) {
105
+ writableMap.putDouble(key, (Double) value);
106
+ } else if (value instanceof Float) {
107
+ writableMap.putDouble(key, ((Float) value).doubleValue());
108
+ } else if (value instanceof Integer) {
109
+ writableMap.putInt(key, (Integer) value);
110
+ } else if (value instanceof Short) {
111
+ writableMap.putInt(key, ((Short) value).intValue());
112
+ } else if (value instanceof Byte) {
113
+ writableMap.putInt(key, ((Byte) value).intValue());
114
+ } else if (value instanceof Long) {
115
+ writableMap.putDouble(key, ((Long) value).doubleValue());
116
+ } else if (value instanceof BigInteger) {
117
+ writableMap.putDouble(key, ((BigInteger) value).doubleValue());
118
+ } else if (value instanceof BigDecimal) {
119
+ writableMap.putDouble(key, ((BigDecimal) value).doubleValue());
120
+ } else if (value instanceof String) {
121
+ writableMap.putString(key, (String) value);
122
+ } else if (value instanceof ReadableArray) {
123
+ writableMap.putArray(key, (ReadableArray) value);
124
+ } else if (value instanceof ReadableMap) {
125
+ writableMap.putMap(key, (ReadableMap) value);
126
+ } else {
127
+ logger.log(SentryLevel.ERROR, "Could not convert object" + value);
133
128
  }
129
+ }
134
130
  }