@sentry/react-native 5.14.1 → 5.16.0-alpha.1
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.
- package/CHANGELOG.md +66 -0
- package/RNSentry.podspec +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +3 -5
- package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +1 -1
- package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +1 -1
- package/app.plugin.js +1 -0
- package/dist/js/NativeRNSentry.d.ts +1 -1
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/NativeRNSentry.js.map +1 -1
- package/dist/js/index.d.ts +4 -3
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js.map +1 -1
- package/dist/js/integrations/debugsymbolicator.d.ts +25 -3
- package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
- package/dist/js/integrations/debugsymbolicator.js +109 -70
- package/dist/js/integrations/debugsymbolicator.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts +4 -0
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js +10 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/profiling/constants.d.ts +2 -0
- package/dist/js/profiling/constants.d.ts.map +1 -0
- package/dist/js/profiling/constants.js +2 -0
- package/dist/js/profiling/constants.js.map +1 -0
- package/dist/js/profiling/convertHermesProfile.d.ts.map +1 -1
- package/dist/js/profiling/convertHermesProfile.js +1 -1
- package/dist/js/profiling/convertHermesProfile.js.map +1 -1
- package/dist/js/profiling/integration.d.ts +0 -1
- package/dist/js/profiling/integration.d.ts.map +1 -1
- package/dist/js/profiling/integration.js +1 -1
- package/dist/js/profiling/integration.js.map +1 -1
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +9 -8
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/touchevents.js +5 -8
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/index.d.ts +3 -2
- package/dist/js/tracing/index.d.ts.map +1 -1
- package/dist/js/tracing/index.js.map +1 -1
- package/dist/js/utils/error.d.ts +19 -0
- package/dist/js/utils/error.d.ts.map +1 -0
- package/dist/js/utils/error.js +30 -0
- package/dist/js/utils/error.js.map +1 -0
- package/dist/js/vendor/base64-js/fromByteArray.d.ts +5 -0
- package/dist/js/vendor/base64-js/fromByteArray.d.ts.map +1 -0
- package/dist/js/vendor/base64-js/fromByteArray.js +61 -0
- package/dist/js/vendor/base64-js/fromByteArray.js.map +1 -0
- package/dist/js/vendor/base64-js/index.d.ts +2 -0
- package/dist/js/vendor/base64-js/index.d.ts.map +1 -0
- package/dist/js/vendor/base64-js/index.js +2 -0
- package/dist/js/vendor/base64-js/index.js.map +1 -0
- package/dist/js/vendor/index.d.ts +2 -0
- package/dist/js/vendor/index.d.ts.map +1 -1
- package/dist/js/vendor/index.js +2 -0
- package/dist/js/vendor/index.js.map +1 -1
- package/dist/js/vendor/react-native/index.d.ts +27 -0
- package/dist/js/vendor/react-native/index.d.ts.map +1 -0
- package/dist/js/vendor/react-native/index.js +3 -0
- package/dist/js/vendor/react-native/index.js.map +1 -0
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.d.ts.map +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +18 -12
- package/dist/js/wrapper.js.map +1 -1
- package/expo.d.ts +1 -0
- package/expo.js +1 -0
- package/ios/RNSentry.mm +2 -6
- package/metro.d.ts +1 -0
- package/metro.js +1 -0
- package/package.json +19 -9
- package/plugin/build/index.d.ts +3 -0
- package/plugin/build/index.js +6 -0
- package/plugin/build/utils.d.ts +7 -0
- package/plugin/build/utils.js +39 -0
- package/plugin/build/withSentry.d.ts +10 -0
- package/plugin/build/withSentry.js +50 -0
- package/plugin/build/withSentryAndroid.d.ts +7 -0
- package/plugin/build/withSentryAndroid.js +68 -0
- package/plugin/build/withSentryIOS.d.ts +8 -0
- package/plugin/build/withSentryIOS.js +71 -0
- package/{sample-new-architecture → samples/react-native}/react-native.config.js +1 -1
- package/scripts/sentry-xcode-debug-files.sh +5 -1
- package/scripts/sentry-xcode.sh +7 -2
- package/src/js/NativeRNSentry.ts +1 -1
- package/ts3.8/dist/js/NativeRNSentry.d.ts +1 -1
- package/ts3.8/dist/js/index.d.ts +4 -3
- package/ts3.8/dist/js/integrations/debugsymbolicator.d.ts +25 -3
- package/ts3.8/dist/js/integrations/reactnativeerrorhandlers.d.ts +4 -0
- package/ts3.8/dist/js/profiling/constants.d.ts +2 -0
- package/ts3.8/dist/js/profiling/integration.d.ts +0 -1
- package/ts3.8/dist/js/tracing/index.d.ts +3 -2
- package/ts3.8/dist/js/utils/error.d.ts +19 -0
- package/ts3.8/dist/js/vendor/base64-js/fromByteArray.d.ts +5 -0
- package/ts3.8/dist/js/vendor/base64-js/index.d.ts +2 -0
- package/ts3.8/dist/js/vendor/index.d.ts +2 -0
- package/ts3.8/dist/js/vendor/react-native/index.d.ts +27 -0
- package/ts3.8/dist/js/version.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.16.0-alpha.1
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add `@sentry/react-native/expo` Expo config plugin ([#3429](https://github.com/getsentry/sentry-react-native/pull/3429))
|
|
8
|
+
|
|
9
|
+
This Release introduces the first alpha version of our new SDK for Expo.
|
|
10
|
+
At this time, the SDK is considered experimental and things might break and change in future versions.
|
|
11
|
+
|
|
12
|
+
The core of the SDK is Expo plugin which you can easily add to your App config:
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
const { withSentry } = require('@sentry/react-native/expo');
|
|
16
|
+
|
|
17
|
+
const config = {...};
|
|
18
|
+
|
|
19
|
+
module.exports = withSentry(config, {
|
|
20
|
+
url: 'https://www.sentry.io/',
|
|
21
|
+
authToken: 'example-token', // Or use SENTRY_AUTH_TOKEN env
|
|
22
|
+
project: 'project-slug', // Or use SENTRY_PROJECT env
|
|
23
|
+
organization: 'org-slug', // Or use SENTRY_ORG env
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- And `Sentry.init` in `App.js`
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
import * as Sentry from '@sentry/react-native';
|
|
31
|
+
|
|
32
|
+
Sentry.init({
|
|
33
|
+
dsn: '__DSN__',
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- Update `sentry-xcode.sh` scripts with Node modules resolution ([#3450](https://github.com/getsentry/sentry-react-native/pull/3450))
|
|
38
|
+
- RN SDK and Sentry CLI are dynamically resolved if override is not supplied
|
|
39
|
+
|
|
40
|
+
### Fixes
|
|
41
|
+
|
|
42
|
+
- Transform shipped JSX for both react-native and web ([#3428](https://github.com/getsentry/sentry-react-native/pull/3428))
|
|
43
|
+
- Removes builds errors when using react-native-web with Webpack
|
|
44
|
+
|
|
45
|
+
## 5.15.0
|
|
46
|
+
|
|
47
|
+
### Features
|
|
48
|
+
|
|
49
|
+
- New simplified Sentry Metro Serializer export ([#3450](https://github.com/getsentry/sentry-react-native/pull/3450))
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
const { createSentryMetroSerializer } = require('@sentry/react-native/metro');
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Fixes
|
|
56
|
+
|
|
57
|
+
- Encode envelopes using Base64, fix array length limit when transferring over Bridge. ([#2852](https://github.com/getsentry/sentry-react-native/pull/2852))
|
|
58
|
+
- This fix requires a rebuild of the native app
|
|
59
|
+
- Symbolicate message and non-Error stacktraces locally in debug mode ([#3420](https://github.com/getsentry/sentry-react-native/pull/3420))
|
|
60
|
+
- Remove Sentry SDK frames from rejected promise SyntheticError stack ([#3423](https://github.com/getsentry/sentry-react-native/pull/3423))
|
|
61
|
+
- Fix path from Xcode scripts to Collect Modules ([#3451](https://github.com/getsentry/sentry-react-native/pull/3451))
|
|
62
|
+
|
|
63
|
+
### Dependencies
|
|
64
|
+
|
|
65
|
+
- Bump Cocoa SDK from v8.15.2 to v8.17.1 ([#3412](https://github.com/getsentry/sentry-react-native/pull/3412))
|
|
66
|
+
- [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#8171)
|
|
67
|
+
- [diff](https://github.com/getsentry/sentry-cocoa/compare/8.15.2...8.17.1)
|
|
68
|
+
|
|
3
69
|
## 5.14.1
|
|
4
70
|
|
|
5
71
|
### Fixes
|
package/RNSentry.podspec
CHANGED
|
@@ -71,6 +71,7 @@ import io.sentry.protocol.SentryPackage;
|
|
|
71
71
|
import io.sentry.protocol.User;
|
|
72
72
|
import io.sentry.protocol.ViewHierarchy;
|
|
73
73
|
import io.sentry.util.JsonSerializationUtils;
|
|
74
|
+
import io.sentry.vendor.Base64;
|
|
74
75
|
|
|
75
76
|
public class RNSentryModuleImpl {
|
|
76
77
|
|
|
@@ -339,11 +340,8 @@ public class RNSentryModuleImpl {
|
|
|
339
340
|
}
|
|
340
341
|
}
|
|
341
342
|
|
|
342
|
-
public void captureEnvelope(
|
|
343
|
-
byte[] bytes =
|
|
344
|
-
for (int i = 0; i < rawBytes.size(); i++) {
|
|
345
|
-
bytes[i] = (byte) rawBytes.getInt(i);
|
|
346
|
-
}
|
|
343
|
+
public void captureEnvelope(String rawBytes, ReadableMap options, Promise promise) {
|
|
344
|
+
byte[] bytes = Base64.decode(rawBytes, Base64.DEFAULT);
|
|
347
345
|
|
|
348
346
|
try {
|
|
349
347
|
InternalSentrySdk.captureEnvelope(bytes);
|
|
@@ -55,7 +55,7 @@ public class RNSentryModule extends NativeRNSentrySpec {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
@Override
|
|
58
|
-
public void captureEnvelope(
|
|
58
|
+
public void captureEnvelope(String rawBytes, ReadableMap options, Promise promise) {
|
|
59
59
|
this.impl.captureEnvelope(rawBytes, options, promise);
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -54,7 +54,7 @@ public class RNSentryModule extends ReactContextBaseJavaModule {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
@ReactMethod
|
|
57
|
-
public void captureEnvelope(
|
|
57
|
+
public void captureEnvelope(String rawBytes, ReadableMap options, Promise promise) {
|
|
58
58
|
this.impl.captureEnvelope(rawBytes, options, promise);
|
|
59
59
|
}
|
|
60
60
|
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./expo');
|
|
@@ -3,7 +3,7 @@ import type { TurboModule } from 'react-native';
|
|
|
3
3
|
import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
|
|
4
4
|
export interface Spec extends TurboModule {
|
|
5
5
|
addBreadcrumb(breadcrumb: UnsafeObject): void;
|
|
6
|
-
captureEnvelope(bytes:
|
|
6
|
+
captureEnvelope(bytes: string, options: {
|
|
7
7
|
store: boolean;
|
|
8
8
|
}): Promise<boolean>;
|
|
9
9
|
captureScreenshot(): Promise<NativeScreenshot[] | undefined | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeRNSentry.d.ts","sourceRoot":"","sources":["../../src/js/NativeRNSentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAI9E,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,aAAa,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,eAAe,CACb,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"NativeRNSentry.d.ts","sourceRoot":"","sources":["../../src/js/NativeRNSentry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeRNSentry.js","sourceRoot":"","sources":["../../src/js/NativeRNSentry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAwInD,2DAA2D;AAC3D,eAAe,mBAAmB,CAAC,YAAY,CAAO,UAAU,CAAC,CAAC","sourcesContent":["import type { Package } from '@sentry/types';\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\nimport type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';\n\n// There has to be only one interface and it has to be named `Spec`\n// Only extra allowed definitions are types (probably codegen bug)\nexport interface Spec extends TurboModule {\n addBreadcrumb(breadcrumb: UnsafeObject): void;\n captureEnvelope(\n bytes:
|
|
1
|
+
{"version":3,"file":"NativeRNSentry.js","sourceRoot":"","sources":["../../src/js/NativeRNSentry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAwInD,2DAA2D;AAC3D,eAAe,mBAAmB,CAAC,YAAY,CAAO,UAAU,CAAC,CAAC","sourcesContent":["import type { Package } from '@sentry/types';\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\nimport type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';\n\n// There has to be only one interface and it has to be named `Spec`\n// Only extra allowed definitions are types (probably codegen bug)\nexport interface Spec extends TurboModule {\n addBreadcrumb(breadcrumb: UnsafeObject): void;\n captureEnvelope(\n bytes: string,\n options: {\n store: boolean;\n },\n ): Promise<boolean>;\n captureScreenshot(): Promise<NativeScreenshot[] | undefined | null>;\n clearBreadcrumbs(): void;\n crash(): void;\n closeNativeSdk(): Promise<void>;\n disableNativeFramesTracking(): void;\n fetchNativeRelease(): Promise<NativeReleaseResponse>;\n fetchNativeSdkInfo(): Promise<Package | null>;\n fetchNativeDeviceContexts(): Promise<NativeDeviceContextsResponse | null>;\n fetchNativeAppStart(): Promise<NativeAppStartResponse | null>;\n fetchNativeFrames(): Promise<NativeFramesResponse | null>;\n initNativeSdk(options: UnsafeObject): Promise<boolean>;\n setUser(defaultUserKeys: UnsafeObject | null, otherUserKeys: UnsafeObject | null): void;\n setContext(key: string, value: UnsafeObject | null): void;\n setExtra(key: string, value: string): void;\n setTag(key: string, value: string): void;\n enableNativeFramesTracking(): void;\n fetchModules(): Promise<string | undefined | null>;\n fetchViewHierarchy(): Promise<number[] | undefined | null>;\n startProfiling(): { started?: boolean; error?: string };\n stopProfiling(): { profile?: string; nativeProfile?: UnsafeObject; error?: string };\n fetchNativePackageName(): Promise<string | undefined | null>;\n fetchNativeStackFramesBy(instructionsAddr: number[]): Promise<NativeStackFrames | undefined | null>;\n}\n\nexport type NativeStackFrame = {\n platform: string;\n /**\n * The instruction address of this frame.\n * Formatted as hex with 0x prefix.\n */\n instruction_addr: string;\n package?: string;\n /**\n * The debug image address of this frame.\n * Formatted as hex with 0x prefix.\n */\n image_addr?: string;\n in_app?: boolean;\n /**\n * The symbol name of this frame.\n * If symbolicated locally.\n */\n function?: string;\n /**\n * The symbol address of this frame.\n * If symbolicated locally.\n * Formatted as hex with 0x prefix.\n */\n symbol_addr?: string;\n};\n\nexport type NativeDebugImage = {\n name?: string;\n type?: string;\n uuid?: string;\n debug_id?: string;\n image_addr?: string;\n image_size?: number;\n code_file?: string;\n image_vmaddr?: string;\n};\n\nexport type NativeStackFrames = {\n frames: NativeStackFrame[];\n debugMetaImages?: NativeDebugImage[];\n};\n\nexport type NativeAppStartResponse = {\n isColdStart: boolean;\n appStartTime: number;\n didFetchAppStart: boolean;\n};\n\nexport type NativeFramesResponse = {\n totalFrames: number;\n slowFrames: number;\n frozenFrames: number;\n};\n\nexport type NativeReleaseResponse = {\n build: string;\n id: string;\n version: string;\n};\n\n/**\n * This type describes serialized scope from sentry-cocoa and sentry-android\n * https://github.com/getsentry/sentry-cocoa/blob/master/Sources/Sentry/SentryScope.m\n * https://github.com/getsentry/sentry-java/blob/a461f7e125b65240004e6162b341f383ce2e1394/sentry-android-core/src/main/java/io/sentry/android/core/InternalSentrySdk.java#L32\n */\nexport type NativeDeviceContextsResponse = {\n [key: string]: unknown;\n tags?: Record<string, string>;\n extra?: Record<string, unknown>;\n contexts?: Record<string, Record<string, unknown>>;\n user?: {\n userId?: string;\n email?: string;\n username?: string;\n ipAddress?: string;\n segment?: string;\n data?: Record<string, unknown>;\n };\n dist?: string;\n environment?: string;\n fingerprint?: string[];\n level?: string;\n breadcrumbs?: {\n level?: string;\n timestamp?: string;\n category?: string;\n type?: string;\n message?: string;\n data?: Record<string, unknown>;\n }[];\n};\n\nexport type NativeScreenshot = {\n data: number[];\n contentType: string;\n filename: string;\n};\n\n// The export must be here to pass codegen even if not used\nexport default TurboModuleRegistry.getEnforcing<Spec>('RNSentry');\n"]}
|
package/dist/js/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
export { Breadcrumb, Request, SdkInfo, Event, Exception, StackFrame, Stacktrace, Thread, User, UserFeedback, } from '@sentry/types';
|
|
1
|
+
export type { Breadcrumb, Request, SdkInfo, Event, Exception, StackFrame, Stacktrace, Thread, User, UserFeedback, } from '@sentry/types';
|
|
2
2
|
export { addGlobalEventProcessor, addBreadcrumb, captureException, captureEvent, captureMessage, getHubFromCarrier, getCurrentHub, Hub, Scope, setContext, setExtra, setExtras, setTag, setTags, setUser, startTransaction, startInactiveSpan, startSpan, startSpanManual, getActiveSpan, } from '@sentry/core';
|
|
3
3
|
export { Integrations as BrowserIntegrations, ErrorBoundary, withErrorBoundary, createReduxEnhancer, Profiler, useProfiler, withProfiler, } from '@sentry/react';
|
|
4
4
|
export { lastEventId } from '@sentry/browser';
|
|
5
5
|
import * as Integrations from './integrations';
|
|
6
6
|
import { SDK_NAME, SDK_VERSION } from './version';
|
|
7
|
-
export { ReactNativeOptions } from './options';
|
|
7
|
+
export type { ReactNativeOptions } from './options';
|
|
8
8
|
export { ReactNativeClient } from './client';
|
|
9
9
|
export { init, wrap, setDist, setRelease, nativeCrash, flush, close, captureUserFeedback, withScope, configureScope, } from './sdk';
|
|
10
10
|
export { TouchEventBoundary, withTouchEventBoundary } from './touchevents';
|
|
11
|
-
export { ReactNativeTracing, ReactNavigationV4Instrumentation, ReactNavigationV5Instrumentation, ReactNavigationInstrumentation, ReactNativeNavigationInstrumentation, RoutingInstrumentation,
|
|
11
|
+
export { ReactNativeTracing, ReactNavigationV4Instrumentation, ReactNavigationV5Instrumentation, ReactNavigationInstrumentation, ReactNativeNavigationInstrumentation, RoutingInstrumentation, sentryTraceGesture, } from './tracing';
|
|
12
|
+
export type { ReactNavigationTransactionContext } from './tracing';
|
|
12
13
|
export { Integrations, SDK_NAME, SDK_VERSION };
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/js/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,MAAM,EACN,IAAI,EACJ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC;AAKtB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI,EAEJ,OAAO,EAEP,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EAEhC,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/js/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,qBAAqB,EAAE,CAAC;AAExB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI;AACJ,mDAAmD;AACnD,OAAO;AACP,mDAAmD;AACnD,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC;AAChC,mDAAmD;AACnD,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,qBAAqB,EAAE,CAAC;AAExB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI;AACJ,mDAAmD;AACnD,OAAO;AACP,mDAAmD;AACnD,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC;AAChC,mDAAmD;AACnD,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC","sourcesContent":["export type {\n Breadcrumb,\n Request,\n SdkInfo,\n Event,\n Exception,\n StackFrame,\n Stacktrace,\n Thread,\n User,\n UserFeedback,\n} from '@sentry/types';\n\nexport {\n addGlobalEventProcessor,\n addBreadcrumb,\n captureException,\n captureEvent,\n captureMessage,\n getHubFromCarrier,\n getCurrentHub,\n Hub,\n Scope,\n setContext,\n setExtra,\n setExtras,\n setTag,\n setTags,\n setUser,\n startTransaction,\n startInactiveSpan,\n startSpan,\n startSpanManual,\n getActiveSpan,\n} from '@sentry/core';\n\nimport { _addTracingExtensions } from './measurements';\n_addTracingExtensions();\n\nexport {\n Integrations as BrowserIntegrations,\n ErrorBoundary,\n withErrorBoundary,\n createReduxEnhancer,\n Profiler,\n useProfiler,\n withProfiler,\n} from '@sentry/react';\n\nexport { lastEventId } from '@sentry/browser';\n\nimport * as Integrations from './integrations';\nimport { SDK_NAME, SDK_VERSION } from './version';\nexport type { ReactNativeOptions } from './options';\nexport { ReactNativeClient } from './client';\n\nexport {\n init,\n wrap,\n // eslint-disable-next-line deprecation/deprecation\n setDist,\n // eslint-disable-next-line deprecation/deprecation\n setRelease,\n nativeCrash,\n flush,\n close,\n captureUserFeedback,\n withScope,\n configureScope,\n} from './sdk';\nexport { TouchEventBoundary, withTouchEventBoundary } from './touchevents';\n\nexport {\n ReactNativeTracing,\n ReactNavigationV4Instrumentation,\n // eslint-disable-next-line deprecation/deprecation\n ReactNavigationV5Instrumentation,\n ReactNavigationInstrumentation,\n ReactNativeNavigationInstrumentation,\n RoutingInstrumentation,\n sentryTraceGesture,\n} from './tracing';\nexport type { ReactNavigationTransactionContext } from './tracing';\nexport { Integrations, SDK_NAME, SDK_VERSION };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Integration } from '@sentry/types';
|
|
1
|
+
import type { EventProcessor, Hub, Integration } from '@sentry/types';
|
|
2
2
|
/**
|
|
3
3
|
* React Native Error
|
|
4
4
|
*/
|
|
@@ -21,7 +21,7 @@ export declare class DebugSymbolicator implements Integration {
|
|
|
21
21
|
/**
|
|
22
22
|
* @inheritDoc
|
|
23
23
|
*/
|
|
24
|
-
setupOnce(): void;
|
|
24
|
+
setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void;
|
|
25
25
|
/**
|
|
26
26
|
* Symbolicates the stack on the device talking to local dev server.
|
|
27
27
|
* Mutates the passed event.
|
|
@@ -37,7 +37,13 @@ export declare class DebugSymbolicator implements Integration {
|
|
|
37
37
|
* @param event Event
|
|
38
38
|
* @param frames StackFrame[]
|
|
39
39
|
*/
|
|
40
|
-
private
|
|
40
|
+
private _replaceExceptionFramesInEvent;
|
|
41
|
+
/**
|
|
42
|
+
* Replaces the frames in the thread of a message.
|
|
43
|
+
* @param event Event
|
|
44
|
+
* @param frames StackFrame[]
|
|
45
|
+
*/
|
|
46
|
+
private _replaceThreadFramesInEvent;
|
|
41
47
|
/**
|
|
42
48
|
* This tries to add source context for in_app Frames
|
|
43
49
|
*
|
|
@@ -45,5 +51,21 @@ export declare class DebugSymbolicator implements Integration {
|
|
|
45
51
|
* @param getDevServer function from RN to get DevServer URL
|
|
46
52
|
*/
|
|
47
53
|
private _addSourceContext;
|
|
54
|
+
/**
|
|
55
|
+
* Get source context for segment
|
|
56
|
+
*/
|
|
57
|
+
private _fetchSourceContext;
|
|
58
|
+
/**
|
|
59
|
+
* Loads and calls RN Core Devtools parseErrorStack function.
|
|
60
|
+
*/
|
|
61
|
+
private _parseErrorStack;
|
|
62
|
+
/**
|
|
63
|
+
* Loads and calls RN Core Devtools symbolicateStackTrace function.
|
|
64
|
+
*/
|
|
65
|
+
private _symbolicateStackTrace;
|
|
66
|
+
/**
|
|
67
|
+
* Loads and returns the RN DevServer URL.
|
|
68
|
+
*/
|
|
69
|
+
private _getDevServer;
|
|
48
70
|
}
|
|
49
71
|
//# sourceMappingURL=debugsymbolicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debugsymbolicator.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"debugsymbolicator.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAAE,GAAG,EAAE,WAAW,EAAkC,MAAM,eAAe,CAAC;AAQxH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6DAA6D;AAC7D,qBAAa,iBAAkB,YAAW,WAAW;IACnD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAuB;IAC/C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAwB;IAE3C;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG,IAAI;IAmC7G;;;OAGG;YACW,YAAY;IAiC1B;;;OAGG;YACW,uCAAuC;IA2BrD;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IAWtC;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAMnC;;;;;OAKG;YACW,iBAAiB;IA6B/B;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;IACH,OAAO,CAAC,aAAa;CAUtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
|
|
3
2
|
import { addContextToFrame, logger } from '@sentry/utils';
|
|
3
|
+
import { getFramesToPop, isErrorLike } from '../utils/error';
|
|
4
4
|
const INTERNAL_CALLSITES_REGEX = new RegExp(['ReactNativeRenderer-dev\\.js$', 'MessageQueue\\.js$'].join('|'));
|
|
5
5
|
/** Tries to symbolicate the JS stack trace on the device. */
|
|
6
6
|
export class DebugSymbolicator {
|
|
@@ -13,24 +13,29 @@ export class DebugSymbolicator {
|
|
|
13
13
|
/**
|
|
14
14
|
* @inheritDoc
|
|
15
15
|
*/
|
|
16
|
-
setupOnce() {
|
|
16
|
+
setupOnce(addGlobalEventProcessor, getCurrentHub) {
|
|
17
17
|
addGlobalEventProcessor((event, hint) => __awaiter(this, void 0, void 0, function* () {
|
|
18
18
|
const self = getCurrentHub().getIntegration(DebugSymbolicator);
|
|
19
|
-
if (!self
|
|
19
|
+
if (!self) {
|
|
20
20
|
return event;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
stack = parseErrorStack(reactError);
|
|
22
|
+
if (event.exception && isErrorLike(hint.originalException)) {
|
|
23
|
+
// originalException is ErrorLike object
|
|
24
|
+
const symbolicatedFrames = yield this._symbolicate(hint.originalException.stack, getFramesToPop(hint.originalException));
|
|
25
|
+
symbolicatedFrames && this._replaceExceptionFramesInEvent(event, symbolicatedFrames);
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
27
|
+
else if (hint.syntheticException && isErrorLike(hint.syntheticException)) {
|
|
28
|
+
// syntheticException is Error object
|
|
29
|
+
const symbolicatedFrames = yield this._symbolicate(hint.syntheticException.stack, getFramesToPop(hint.syntheticException));
|
|
30
|
+
if (event.exception) {
|
|
31
|
+
symbolicatedFrames && this._replaceExceptionFramesInEvent(event, symbolicatedFrames);
|
|
32
|
+
}
|
|
33
|
+
else if (event.threads) {
|
|
34
|
+
// RN JS doesn't have threads
|
|
35
|
+
// syntheticException is used for Sentry.captureMessage() threads
|
|
36
|
+
symbolicatedFrames && this._replaceThreadFramesInEvent(event, symbolicatedFrames);
|
|
37
|
+
}
|
|
32
38
|
}
|
|
33
|
-
yield self._symbolicate(event, stack);
|
|
34
39
|
return event;
|
|
35
40
|
}));
|
|
36
41
|
}
|
|
@@ -38,35 +43,31 @@ export class DebugSymbolicator {
|
|
|
38
43
|
* Symbolicates the stack on the device talking to local dev server.
|
|
39
44
|
* Mutates the passed event.
|
|
40
45
|
*/
|
|
41
|
-
_symbolicate(
|
|
46
|
+
_symbolicate(rawStack, skipFirstFrames = 0) {
|
|
42
47
|
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const parsedStack = this._parseErrorStack(rawStack);
|
|
43
49
|
try {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
let newStack = prettyStack;
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
50
|
-
if (prettyStack.stack) {
|
|
51
|
-
// This has been changed in an react-native version so stack is contained in here
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
53
|
-
newStack = prettyStack.stack;
|
|
54
|
-
}
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
56
|
-
const stackWithoutInternalCallsites = newStack.filter((frame) =>
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
58
|
-
frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null);
|
|
59
|
-
const symbolicatedFrames = yield this._convertReactNativeFramesToSentryFrames(stackWithoutInternalCallsites);
|
|
60
|
-
this._replaceFramesInEvent(event, symbolicatedFrames);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
logger.error('The stack is null');
|
|
50
|
+
const prettyStack = yield this._symbolicateStackTrace(parsedStack);
|
|
51
|
+
if (!prettyStack) {
|
|
52
|
+
logger.error('React Native DevServer could not symbolicate the stack trace.');
|
|
53
|
+
return null;
|
|
64
54
|
}
|
|
55
|
+
// This has been changed in an react-native version so stack is contained in here
|
|
56
|
+
const newStack = prettyStack.stack || prettyStack;
|
|
57
|
+
// https://github.com/getsentry/sentry-javascript/blob/739d904342aaf9327312f409952f14ceff4ae1ab/packages/utils/src/stacktrace.ts#L23
|
|
58
|
+
// Match SentryParser which counts lines of stack (-1 for first line with the Error message)
|
|
59
|
+
const skipFirstAdjustedToSentryStackParser = Math.max(skipFirstFrames - 1, 0);
|
|
60
|
+
const stackWithoutPoppedFrames = skipFirstAdjustedToSentryStackParser
|
|
61
|
+
? newStack.slice(skipFirstAdjustedToSentryStackParser)
|
|
62
|
+
: newStack;
|
|
63
|
+
const stackWithoutInternalCallsites = stackWithoutPoppedFrames.filter((frame) => frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null);
|
|
64
|
+
return yield this._convertReactNativeFramesToSentryFrames(stackWithoutInternalCallsites);
|
|
65
65
|
}
|
|
66
66
|
catch (error) {
|
|
67
67
|
if (error instanceof Error) {
|
|
68
68
|
logger.warn(`Unable to symbolicate stack trace: ${error.message}`);
|
|
69
69
|
}
|
|
70
|
+
return null;
|
|
70
71
|
}
|
|
71
72
|
});
|
|
72
73
|
}
|
|
@@ -76,13 +77,6 @@ export class DebugSymbolicator {
|
|
|
76
77
|
*/
|
|
77
78
|
_convertReactNativeFramesToSentryFrames(frames) {
|
|
78
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
let getDevServer;
|
|
80
|
-
try {
|
|
81
|
-
getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');
|
|
82
|
-
}
|
|
83
|
-
catch (_oO) {
|
|
84
|
-
// We can't load devserver URL
|
|
85
|
-
}
|
|
86
80
|
return Promise.all(frames.map((frame) => __awaiter(this, void 0, void 0, function* () {
|
|
87
81
|
let inApp = !!frame.column && !!frame.lineNumber;
|
|
88
82
|
inApp =
|
|
@@ -97,18 +91,8 @@ export class DebugSymbolicator {
|
|
|
97
91
|
function: frame.methodName,
|
|
98
92
|
in_app: inApp,
|
|
99
93
|
};
|
|
100
|
-
// The upstream `react-native@0.61` delegates parsing of stacks to `stacktrace-parser`, which is buggy and
|
|
101
|
-
// leaves a trailing `(address at` in the function name.
|
|
102
|
-
// `react-native@0.62` seems to have custom logic to parse hermes frames specially.
|
|
103
|
-
// Anyway, all we do here is throw away the bogus suffix.
|
|
104
|
-
if (newFrame.function) {
|
|
105
|
-
const addressAtPos = newFrame.function.indexOf('(address at');
|
|
106
|
-
if (addressAtPos >= 0) {
|
|
107
|
-
newFrame.function = newFrame.function.substring(0, addressAtPos).trim();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
94
|
if (inApp) {
|
|
111
|
-
yield this._addSourceContext(newFrame
|
|
95
|
+
yield this._addSourceContext(newFrame);
|
|
112
96
|
}
|
|
113
97
|
return newFrame;
|
|
114
98
|
})));
|
|
@@ -119,7 +103,7 @@ export class DebugSymbolicator {
|
|
|
119
103
|
* @param event Event
|
|
120
104
|
* @param frames StackFrame[]
|
|
121
105
|
*/
|
|
122
|
-
|
|
106
|
+
_replaceExceptionFramesInEvent(event, frames) {
|
|
123
107
|
if (event.exception &&
|
|
124
108
|
event.exception.values &&
|
|
125
109
|
event.exception.values[0] &&
|
|
@@ -127,36 +111,91 @@ export class DebugSymbolicator {
|
|
|
127
111
|
event.exception.values[0].stacktrace.frames = frames.reverse();
|
|
128
112
|
}
|
|
129
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Replaces the frames in the thread of a message.
|
|
116
|
+
* @param event Event
|
|
117
|
+
* @param frames StackFrame[]
|
|
118
|
+
*/
|
|
119
|
+
_replaceThreadFramesInEvent(event, frames) {
|
|
120
|
+
if (event.threads && event.threads.values && event.threads.values[0] && event.threads.values[0].stacktrace) {
|
|
121
|
+
event.threads.values[0].stacktrace.frames = frames.reverse();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
130
124
|
/**
|
|
131
125
|
* This tries to add source context for in_app Frames
|
|
132
126
|
*
|
|
133
127
|
* @param frame StackFrame
|
|
134
128
|
* @param getDevServer function from RN to get DevServer URL
|
|
135
129
|
*/
|
|
136
|
-
_addSourceContext(frame
|
|
137
|
-
var _a, _b;
|
|
130
|
+
_addSourceContext(frame) {
|
|
131
|
+
var _a, _b, _c;
|
|
138
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
-
let
|
|
133
|
+
let sourceContext = null;
|
|
140
134
|
const segments = (_b = (_a = frame.filename) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : [];
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
135
|
+
const serverUrl = (_c = this._getDevServer()) === null || _c === void 0 ? void 0 : _c.url;
|
|
136
|
+
if (!serverUrl) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
for (const idx in segments) {
|
|
140
|
+
if (!Object.prototype.hasOwnProperty.call(segments, idx)) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
sourceContext = yield this._fetchSourceContext(serverUrl, segments, -idx);
|
|
144
|
+
if (sourceContext) {
|
|
145
|
+
break;
|
|
151
146
|
}
|
|
152
147
|
}
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
const lines = content.split('\n');
|
|
156
|
-
addContextToFrame(lines, frame);
|
|
148
|
+
if (!sourceContext) {
|
|
149
|
+
return;
|
|
157
150
|
}
|
|
151
|
+
const lines = sourceContext.split('\n');
|
|
152
|
+
addContextToFrame(lines, frame);
|
|
158
153
|
});
|
|
159
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Get source context for segment
|
|
157
|
+
*/
|
|
158
|
+
_fetchSourceContext(url, segments, start) {
|
|
159
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
const response = yield fetch(`${url}${segments.slice(start).join('/')}`, {
|
|
161
|
+
method: 'GET',
|
|
162
|
+
});
|
|
163
|
+
if (response.ok) {
|
|
164
|
+
return response.text();
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Loads and calls RN Core Devtools parseErrorStack function.
|
|
171
|
+
*/
|
|
172
|
+
_parseErrorStack(errorStack) {
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
174
|
+
const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');
|
|
175
|
+
return parseErrorStack(errorStack);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Loads and calls RN Core Devtools symbolicateStackTrace function.
|
|
179
|
+
*/
|
|
180
|
+
_symbolicateStackTrace(stack, extraData) {
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
182
|
+
const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');
|
|
183
|
+
return symbolicateStackTrace(stack, extraData);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Loads and returns the RN DevServer URL.
|
|
187
|
+
*/
|
|
188
|
+
_getDevServer() {
|
|
189
|
+
try {
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
191
|
+
const getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');
|
|
192
|
+
return getDevServer();
|
|
193
|
+
}
|
|
194
|
+
catch (_oO) {
|
|
195
|
+
// We can't load devserver URL
|
|
196
|
+
}
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
160
199
|
}
|
|
161
200
|
/**
|
|
162
201
|
* @inheritDoc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debugsymbolicator.js","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"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","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport type { Event, EventHint, Integration, StackFrame } from '@sentry/types';\nimport { addContextToFrame, logger } from '@sentry/utils';\n\nconst INTERNAL_CALLSITES_REGEX = new RegExp(['ReactNativeRenderer-dev\\\\.js$', 'MessageQueue\\\\.js$'].join('|'));\n\ninterface GetDevServer {\n (): { url: string };\n}\n\n/**\n * React Native Stack Frame\n */\ninterface ReactNativeFrame {\n // arguments: []\n column: number;\n file: string;\n lineNumber: number;\n methodName: string;\n}\n\n/**\n * React Native Error\n */\nexport type ReactNativeError = Error & {\n framesToPop?: number;\n jsEngine?: string;\n preventSymbolication?: boolean;\n componentStack?: string;\n};\n\n/** Tries to symbolicate the JS stack trace on the device. */\nexport class DebugSymbolicator implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DebugSymbolicator';\n /**\n * @inheritDoc\n */\n public name: string = DebugSymbolicator.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor(async (event: Event, hint?: EventHint) => {\n const self = getCurrentHub().getIntegration(DebugSymbolicator);\n\n if (!self || hint === undefined || hint.originalException === undefined) {\n return event;\n }\n\n const reactError = hint.originalException as ReactNativeError;\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');\n\n let stack;\n try {\n stack = parseErrorStack(reactError);\n } catch (e) {\n // In RN 0.64 `parseErrorStack` now only takes a string\n stack = parseErrorStack(reactError.stack);\n }\n\n await self._symbolicate(event, stack);\n\n return event;\n });\n }\n\n /**\n * Symbolicates the stack on the device talking to local dev server.\n * Mutates the passed event.\n */\n private async _symbolicate(event: Event, stack: string | undefined): Promise<void> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');\n const prettyStack = await symbolicateStackTrace(stack);\n\n if (prettyStack) {\n let newStack = prettyStack;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (prettyStack.stack) {\n // This has been changed in an react-native version so stack is contained in here\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n newStack = prettyStack.stack;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const stackWithoutInternalCallsites = newStack.filter(\n (frame: { file?: string }) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null,\n );\n\n const symbolicatedFrames = await this._convertReactNativeFramesToSentryFrames(stackWithoutInternalCallsites);\n this._replaceFramesInEvent(event, symbolicatedFrames);\n } else {\n logger.error('The stack is null');\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.warn(`Unable to symbolicate stack trace: ${error.message}`);\n }\n }\n }\n\n /**\n * Converts ReactNativeFrames to frames in the Sentry format\n * @param frames ReactNativeFrame[]\n */\n private async _convertReactNativeFramesToSentryFrames(frames: ReactNativeFrame[]): Promise<StackFrame[]> {\n let getDevServer: GetDevServer;\n try {\n getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');\n } catch (_oO) {\n // We can't load devserver URL\n }\n return Promise.all(\n frames.map(async (frame: ReactNativeFrame): Promise<StackFrame> => {\n let inApp = !!frame.column && !!frame.lineNumber;\n inApp =\n inApp &&\n frame.file !== undefined &&\n !frame.file.includes('node_modules') &&\n !frame.file.includes('native code');\n\n const newFrame: StackFrame = {\n lineno: frame.lineNumber,\n colno: frame.column,\n filename: frame.file,\n function: frame.methodName,\n in_app: inApp,\n };\n\n // The upstream `react-native@0.61` delegates parsing of stacks to `stacktrace-parser`, which is buggy and\n // leaves a trailing `(address at` in the function name.\n // `react-native@0.62` seems to have custom logic to parse hermes frames specially.\n // Anyway, all we do here is throw away the bogus suffix.\n if (newFrame.function) {\n const addressAtPos = newFrame.function.indexOf('(address at');\n if (addressAtPos >= 0) {\n newFrame.function = newFrame.function.substring(0, addressAtPos).trim();\n }\n }\n\n if (inApp) {\n await this._addSourceContext(newFrame, getDevServer);\n }\n\n return newFrame;\n }),\n );\n }\n\n /**\n * Replaces the frames in the exception of a error.\n * @param event Event\n * @param frames StackFrame[]\n */\n private _replaceFramesInEvent(event: Event, frames: StackFrame[]): void {\n if (\n event.exception &&\n event.exception.values &&\n event.exception.values[0] &&\n event.exception.values[0].stacktrace\n ) {\n event.exception.values[0].stacktrace.frames = frames.reverse();\n }\n }\n\n /**\n * This tries to add source context for in_app Frames\n *\n * @param frame StackFrame\n * @param getDevServer function from RN to get DevServer URL\n */\n private async _addSourceContext(frame: StackFrame, getDevServer?: GetDevServer): Promise<void> {\n let response;\n\n const segments = frame.filename?.split('/') ?? [];\n\n if (getDevServer) {\n for (const idx in segments) {\n if (Object.prototype.hasOwnProperty.call(segments, idx)) {\n response = await fetch(`${getDevServer().url}${segments.slice(-idx).join('/')}`, {\n method: 'GET',\n });\n\n if (response.ok) {\n break;\n }\n }\n }\n }\n\n if (response && response.ok) {\n const content = await response.text();\n const lines = content.split('\\n');\n\n addContextToFrame(lines, frame);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"debugsymbolicator.js","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Event, EventHint, EventProcessor, Hub, Integration, StackFrame as SentryStackFrame } from '@sentry/types';\nimport { addContextToFrame, logger } from '@sentry/utils';\n\nimport { getFramesToPop, isErrorLike } from '../utils/error';\nimport type * as ReactNative from '../vendor/react-native';\n\nconst INTERNAL_CALLSITES_REGEX = new RegExp(['ReactNativeRenderer-dev\\\\.js$', 'MessageQueue\\\\.js$'].join('|'));\n\n/**\n * React Native Error\n */\nexport type ReactNativeError = Error & {\n framesToPop?: number;\n jsEngine?: string;\n preventSymbolication?: boolean;\n componentStack?: string;\n};\n\n/** Tries to symbolicate the JS stack trace on the device. */\nexport class DebugSymbolicator implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DebugSymbolicator';\n /**\n * @inheritDoc\n */\n public name: string = DebugSymbolicator.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor(async (event: Event, hint: EventHint) => {\n const self = getCurrentHub().getIntegration(DebugSymbolicator);\n\n if (!self) {\n return event;\n }\n\n if (event.exception && isErrorLike(hint.originalException)) {\n // originalException is ErrorLike object\n const symbolicatedFrames = await this._symbolicate(\n hint.originalException.stack,\n getFramesToPop(hint.originalException as Error),\n );\n symbolicatedFrames && this._replaceExceptionFramesInEvent(event, symbolicatedFrames);\n } else if (hint.syntheticException && isErrorLike(hint.syntheticException)) {\n // syntheticException is Error object\n const symbolicatedFrames = await this._symbolicate(\n hint.syntheticException.stack,\n getFramesToPop(hint.syntheticException),\n );\n\n if (event.exception) {\n symbolicatedFrames && this._replaceExceptionFramesInEvent(event, symbolicatedFrames);\n } else if (event.threads) {\n // RN JS doesn't have threads\n // syntheticException is used for Sentry.captureMessage() threads\n symbolicatedFrames && this._replaceThreadFramesInEvent(event, symbolicatedFrames);\n }\n }\n\n return event;\n });\n }\n\n /**\n * Symbolicates the stack on the device talking to local dev server.\n * Mutates the passed event.\n */\n private async _symbolicate(rawStack: string, skipFirstFrames: number = 0): Promise<SentryStackFrame[] | null> {\n const parsedStack = this._parseErrorStack(rawStack);\n\n try {\n const prettyStack = await this._symbolicateStackTrace(parsedStack);\n if (!prettyStack) {\n logger.error('React Native DevServer could not symbolicate the stack trace.');\n return null;\n }\n\n // This has been changed in an react-native version so stack is contained in here\n const newStack = prettyStack.stack || prettyStack;\n\n // https://github.com/getsentry/sentry-javascript/blob/739d904342aaf9327312f409952f14ceff4ae1ab/packages/utils/src/stacktrace.ts#L23\n // Match SentryParser which counts lines of stack (-1 for first line with the Error message)\n const skipFirstAdjustedToSentryStackParser = Math.max(skipFirstFrames - 1, 0);\n const stackWithoutPoppedFrames = skipFirstAdjustedToSentryStackParser\n ? newStack.slice(skipFirstAdjustedToSentryStackParser)\n : newStack;\n\n const stackWithoutInternalCallsites = stackWithoutPoppedFrames.filter(\n (frame: { file?: string }) => frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null,\n );\n\n return await this._convertReactNativeFramesToSentryFrames(stackWithoutInternalCallsites);\n } catch (error) {\n if (error instanceof Error) {\n logger.warn(`Unable to symbolicate stack trace: ${error.message}`);\n }\n return null;\n }\n }\n\n /**\n * Converts ReactNativeFrames to frames in the Sentry format\n * @param frames ReactNativeFrame[]\n */\n private async _convertReactNativeFramesToSentryFrames(frames: ReactNative.StackFrame[]): Promise<SentryStackFrame[]> {\n return Promise.all(\n frames.map(async (frame: ReactNative.StackFrame): Promise<SentryStackFrame> => {\n let inApp = !!frame.column && !!frame.lineNumber;\n inApp =\n inApp &&\n frame.file !== undefined &&\n !frame.file.includes('node_modules') &&\n !frame.file.includes('native code');\n\n const newFrame: SentryStackFrame = {\n lineno: frame.lineNumber,\n colno: frame.column,\n filename: frame.file,\n function: frame.methodName,\n in_app: inApp,\n };\n\n if (inApp) {\n await this._addSourceContext(newFrame);\n }\n\n return newFrame;\n }),\n );\n }\n\n /**\n * Replaces the frames in the exception of a error.\n * @param event Event\n * @param frames StackFrame[]\n */\n private _replaceExceptionFramesInEvent(event: Event, frames: SentryStackFrame[]): void {\n if (\n event.exception &&\n event.exception.values &&\n event.exception.values[0] &&\n event.exception.values[0].stacktrace\n ) {\n event.exception.values[0].stacktrace.frames = frames.reverse();\n }\n }\n\n /**\n * Replaces the frames in the thread of a message.\n * @param event Event\n * @param frames StackFrame[]\n */\n private _replaceThreadFramesInEvent(event: Event, frames: SentryStackFrame[]): void {\n if (event.threads && event.threads.values && event.threads.values[0] && event.threads.values[0].stacktrace) {\n event.threads.values[0].stacktrace.frames = frames.reverse();\n }\n }\n\n /**\n * This tries to add source context for in_app Frames\n *\n * @param frame StackFrame\n * @param getDevServer function from RN to get DevServer URL\n */\n private async _addSourceContext(frame: SentryStackFrame): Promise<void> {\n let sourceContext: string | null = null;\n\n const segments = frame.filename?.split('/') ?? [];\n\n const serverUrl = this._getDevServer()?.url;\n if (!serverUrl) {\n return;\n }\n\n for (const idx in segments) {\n if (!Object.prototype.hasOwnProperty.call(segments, idx)) {\n continue;\n }\n\n sourceContext = await this._fetchSourceContext(serverUrl, segments, -idx);\n if (sourceContext) {\n break;\n }\n }\n\n if (!sourceContext) {\n return;\n }\n\n const lines = sourceContext.split('\\n');\n addContextToFrame(lines, frame);\n }\n\n /**\n * Get source context for segment\n */\n private async _fetchSourceContext(url: string, segments: Array<string>, start: number): Promise<string | null> {\n const response = await fetch(`${url}${segments.slice(start).join('/')}`, {\n method: 'GET',\n });\n\n if (response.ok) {\n return response.text();\n }\n return null;\n }\n\n /**\n * Loads and calls RN Core Devtools parseErrorStack function.\n */\n private _parseErrorStack(errorStack: string): Array<ReactNative.StackFrame> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');\n return parseErrorStack(errorStack);\n }\n\n /**\n * Loads and calls RN Core Devtools symbolicateStackTrace function.\n */\n private _symbolicateStackTrace(\n stack: Array<ReactNative.StackFrame>,\n extraData?: Record<string, unknown>,\n ): Promise<ReactNative.SymbolicatedStackTrace> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');\n return symbolicateStackTrace(stack, extraData);\n }\n\n /**\n * Loads and returns the RN DevServer URL.\n */\n private _getDevServer(): ReactNative.DevServerInfo | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');\n return getDevServer();\n } catch (_oO) {\n // We can't load devserver URL\n }\n return undefined;\n }\n}\n"]}
|
|
@@ -54,6 +54,10 @@ export declare class ReactNativeErrorHandlers implements Integration {
|
|
|
54
54
|
* Handle errors
|
|
55
55
|
*/
|
|
56
56
|
private _handleOnError;
|
|
57
|
+
/**
|
|
58
|
+
* Loads and returns rejection tracking module
|
|
59
|
+
*/
|
|
60
|
+
private _loadRejectionTracking;
|
|
57
61
|
}
|
|
58
62
|
export {};
|
|
59
63
|
//# sourceMappingURL=reactnativeerrorhandlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactnativeerrorhandlers.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,WAAW,EAAiB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"reactnativeerrorhandlers.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,WAAW,EAAiB,MAAM,eAAe,CAAC;AAO3E,uCAAuC;AACvC,UAAU,+BAA+B;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAOD,2CAA2C;AAC3C,qBAAa,wBAAyB,YAAW,WAAW;IAC1D;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAA8B;IAEtD;;OAEG;IACI,IAAI,EAAE,MAAM,CAA+B;IAElD,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,kBAAkB;gBACC,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC;IASrE;;OAEG;IACI,SAAS,IAAI,IAAI;IAKxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAoCxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAqEtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAO/B"}
|