@nativescript-community/sentry 3.1.5 → 4.6.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 +30 -0
- package/README.md +2 -6
- package/client.d.ts +38 -3
- package/client.js +143 -5
- package/client.js.map +1 -1
- package/index.d.ts +7 -11
- package/index.js +28 -12
- package/index.js.map +1 -1
- package/integrations/debugsymbolicator.d.ts +4 -4
- package/integrations/debugsymbolicator.js +11 -22
- package/integrations/debugsymbolicator.js.map +1 -1
- package/integrations/devicecontext.js +22 -5
- package/integrations/devicecontext.js.map +1 -1
- package/integrations/eventorigin.d.ts +7 -7
- package/integrations/eventorigin.js +9 -9
- package/integrations/eventorigin.js.map +1 -1
- package/integrations/nativescripterrorhandlers.d.ts +15 -5
- package/integrations/nativescripterrorhandlers.js +55 -44
- package/integrations/nativescripterrorhandlers.js.map +1 -1
- package/integrations/release.js +10 -8
- package/integrations/release.js.map +1 -1
- package/integrations/sdkinfo.d.ts +4 -1
- package/integrations/sdkinfo.js +17 -10
- package/integrations/sdkinfo.js.map +1 -1
- package/measurement.d.ts +4 -0
- package/measurement.js +50 -0
- package/measurement.js.map +1 -0
- package/measurements.d.ts +4 -0
- package/measurements.js +50 -0
- package/measurements.js.map +1 -0
- package/misc.d.ts +8 -0
- package/misc.js +17 -0
- package/misc.js.map +1 -0
- package/options.d.ts +125 -0
- package/options.js +2 -0
- package/options.js.map +1 -0
- package/package.json +9 -12
- package/platforms/android/buildscript.gradle +6 -2
- package/platforms/android/include.gradle +1 -1
- package/platforms/android/native-api-usage.json +4 -1
- package/platforms/android/sentry.aar +0 -0
- package/platforms/ios/Podfile +1 -1
- package/platforms/ios/src/NSSentry.h +8 -3
- package/platforms/ios/src/NSSentry.m +41 -0
- package/scope.d.ts +1 -45
- package/scope.js +90 -68
- package/scope.js.map +1 -1
- package/sdk.d.ts +27 -3
- package/sdk.js +105 -30
- package/sdk.js.map +1 -1
- package/tracing/index.d.ts +2 -1
- package/tracing/index.js +14 -6
- package/tracing/index.js.map +1 -1
- package/tracing/nativeframes.d.ts +68 -0
- package/tracing/nativeframes.js +175 -0
- package/tracing/nativeframes.js.map +1 -0
- package/tracing/nstracing.d.ts +98 -47
- package/tracing/nstracing.js +164 -44
- package/tracing/nstracing.js.map +1 -1
- package/tracing/routingInstrumentation.d.ts +46 -0
- package/tracing/routingInstrumentation.js +33 -0
- package/tracing/routingInstrumentation.js.map +1 -0
- package/tracing/stalltracking.d.ts +92 -0
- package/tracing/stalltracking.js +258 -0
- package/tracing/stalltracking.js.map +1 -0
- package/tracing/types.d.ts +13 -0
- package/tracing/types.js +2 -0
- package/tracing/types.js.map +1 -0
- package/tracing/utils.d.ts +22 -1
- package/tracing/utils.js +51 -2
- package/tracing/utils.js.map +1 -1
- package/transports/TextEncoder.d.ts +2 -0
- package/transports/TextEncoder.js +12 -0
- package/transports/TextEncoder.js.map +1 -0
- package/transports/native.d.ts +20 -8
- package/transports/native.js +21 -13
- package/transports/native.js.map +1 -1
- package/utils/envelope.d.ts +11 -0
- package/utils/envelope.js +21 -0
- package/utils/envelope.js.map +1 -0
- package/utils/outcome.d.ts +5 -0
- package/utils/outcome.js +19 -0
- package/utils/outcome.js.map +1 -0
- package/utils/safe.d.ts +17 -0
- package/utils/safe.js +46 -0
- package/utils/safe.js.map +1 -0
- package/vendor/buffer/index.d.ts +1 -0
- package/vendor/buffer/index.js +2 -0
- package/vendor/buffer/index.js.map +1 -0
- package/vendor/buffer/utf8ToBytes.d.ts +9 -0
- package/vendor/buffer/utf8ToBytes.js +81 -0
- package/vendor/buffer/utf8ToBytes.js.map +1 -0
- package/vendor/index.d.ts +1 -0
- package/vendor/index.js +2 -0
- package/vendor/index.js.map +1 -0
- package/version.d.ts +2 -1
- package/version.js +2 -1
- package/version.js.map +1 -1
- package/wrapper.android.d.ts +30 -0
- package/wrapper.android.js +952 -0
- package/wrapper.android.js.map +1 -0
- package/wrapper.d.ts +88 -0
- package/wrapper.ios.d.ts +34 -0
- package/wrapper.ios.js +497 -0
- package/wrapper.ios.js.map +1 -0
- package/pnpm-lock.yaml +0 -914
@@ -1,8 +1,12 @@
|
|
1
1
|
|
2
|
+
// buildscript {
|
2
3
|
repositories {
|
3
4
|
google()
|
4
5
|
mavenCentral()
|
5
6
|
}
|
6
7
|
dependencies {
|
7
|
-
|
8
|
-
|
8
|
+
// def sentryGradleVersion = project.hasProperty("sentryGradleVersion") ? project.sentryGradleVersion : "3.2.0"
|
9
|
+
// println "sentryGradleVersion $sentryGradleVersion"
|
10
|
+
classpath "io.sentry:sentry-android-gradle-plugin:3.2.0"
|
11
|
+
}
|
12
|
+
// }
|
@@ -7,6 +7,6 @@ android {
|
|
7
7
|
}
|
8
8
|
}
|
9
9
|
dependencies {
|
10
|
-
def sentryVersion = project.hasProperty("sentryVersion") ? project.sentryVersion : "5.
|
10
|
+
def sentryVersion = project.hasProperty("sentryVersion") ? project.sentryVersion : "6.5.0"
|
11
11
|
implementation "io.sentry:sentry-android:$sentryVersion"
|
12
12
|
}
|
@@ -3,8 +3,11 @@
|
|
3
3
|
"java.lang:Long*",
|
4
4
|
"java.lang:Boolean*",
|
5
5
|
"java.lang:Integer*",
|
6
|
-
"java.util:Map*",
|
7
6
|
"java.lang:Thread*",
|
7
|
+
"java.nio.charset:Charset*",
|
8
|
+
"java.nio:CharBuffer*",
|
9
|
+
"java.util:Map*",
|
10
|
+
"java.util:UUID*",
|
8
11
|
"io.sentry:Sentry*",
|
9
12
|
"io.sentry:Breadcrumb*",
|
10
13
|
"io.sentry:SentryLevel*",
|
Binary file
|
package/platforms/ios/Podfile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '7.
|
1
|
+
pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '7.27.1'
|
@@ -1,11 +1,16 @@
|
|
1
1
|
#import <Sentry/Sentry.h>
|
2
2
|
|
3
|
-
|
4
3
|
@interface NSSentrySDK: SentrySDK
|
5
|
-
|
6
4
|
+ (void)captureEnvelope:(SentryEnvelope *)envelope;
|
7
|
-
|
8
5
|
+ (void)storeEnvelope:(SentryEnvelope *)envelope;
|
6
|
+
+ (nullable SentryEnvelope *)envelopeWithData:(NSData *)data;
|
7
|
+
|
8
|
+
@property (class, nonatomic, readonly, copy) NSString *installationID;
|
9
|
+
@property (class, nonatomic, assign, readonly) BOOL isFramesTrackingRunning;
|
9
10
|
|
11
|
+
@property (class, nonatomic, assign, readonly) SentryScreenFrames *currentScreenFrames;
|
12
|
+
@property (class, nullable, nonatomic, readonly) SentryAppStartMeasurement *appStartMeasurement;
|
13
|
+
@property (class, nonatomic, assign) BOOL appStartMeasurementHybridSDKMode;
|
14
|
+
@property (class, nonatomic, assign) BOOL framesTrackingMeasurementHybridSDKMode;
|
10
15
|
|
11
16
|
@end
|
@@ -2,4 +2,45 @@
|
|
2
2
|
#import <Sentry/Sentry.h>
|
3
3
|
|
4
4
|
@implementation NSSentrySDK
|
5
|
+
|
6
|
+
+ (void)captureEnvelope:(SentryEnvelope *)envelope
|
7
|
+
{
|
8
|
+
return [PrivateSentrySDKOnly captureEnvelope:envelope];
|
9
|
+
}
|
10
|
+
+ (void)storeEnvelope:(SentryEnvelope *)envelope
|
11
|
+
{
|
12
|
+
return [PrivateSentrySDKOnly storeEnvelope:envelope];
|
13
|
+
}
|
14
|
+
+ (nullable SentryEnvelope *)envelopeWithData:(NSData *)data
|
15
|
+
{
|
16
|
+
return [PrivateSentrySDKOnly envelopeWithData:data];
|
17
|
+
}
|
18
|
+
|
19
|
+
+ (NSString *)installationID
|
20
|
+
{
|
21
|
+
return [PrivateSentrySDKOnly installationID];
|
22
|
+
}
|
23
|
+
|
24
|
+
+ (nullable SentryAppStartMeasurement *)appStartMeasurement
|
25
|
+
{
|
26
|
+
return [PrivateSentrySDKOnly appStartMeasurement];
|
27
|
+
}
|
28
|
+
|
29
|
+
+ (SentryScreenFrames *)currentScreenFrames
|
30
|
+
{
|
31
|
+
return [PrivateSentrySDKOnly currentScreenFrames];
|
32
|
+
}
|
33
|
+
|
34
|
+
+ (BOOL)isFramesTrackingRunning
|
35
|
+
{
|
36
|
+
return [PrivateSentrySDKOnly isFramesTrackingRunning];
|
37
|
+
}
|
38
|
+
+ (void)setAppStartMeasurementHybridSDKMode:(BOOL)appStartMeasurementHybridSDKMode
|
39
|
+
{
|
40
|
+
[PrivateSentrySDKOnly setAppStartMeasurementHybridSDKMode:appStartMeasurementHybridSDKMode];
|
41
|
+
}
|
42
|
+
+ (void)setFramesTrackingMeasurementHybridSDKMode:(BOOL)framesTrackingMeasurementHybridSDKMode
|
43
|
+
{
|
44
|
+
[PrivateSentrySDKOnly setFramesTrackingMeasurementHybridSDKMode:framesTrackingMeasurementHybridSDKMode];
|
45
|
+
}
|
5
46
|
@end
|
package/scope.d.ts
CHANGED
@@ -1,45 +1 @@
|
|
1
|
-
|
2
|
-
import { Breadcrumb, User } from '@sentry/types';
|
3
|
-
/**
|
4
|
-
* Extends the scope methods to set scope on the Native SDKs
|
5
|
-
*/
|
6
|
-
export declare class NativescriptScope extends Scope {
|
7
|
-
/**
|
8
|
-
* @inheritDoc
|
9
|
-
*/
|
10
|
-
setUser(user: User | null): this;
|
11
|
-
/**
|
12
|
-
* @inheritDoc
|
13
|
-
*/
|
14
|
-
setTag(key: string, value: string): this;
|
15
|
-
/**
|
16
|
-
* @inheritDoc
|
17
|
-
*/
|
18
|
-
setTags(tags: {
|
19
|
-
[key: string]: string;
|
20
|
-
}): this;
|
21
|
-
/**
|
22
|
-
* @inheritDoc
|
23
|
-
*/
|
24
|
-
setExtras(extras: {
|
25
|
-
[key: string]: any;
|
26
|
-
}): this;
|
27
|
-
/**
|
28
|
-
* @inheritDoc
|
29
|
-
*/
|
30
|
-
setExtra(key: string, extra: any): this;
|
31
|
-
/**
|
32
|
-
* @inheritDoc
|
33
|
-
*/
|
34
|
-
addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this;
|
35
|
-
/**
|
36
|
-
* @inheritDoc
|
37
|
-
*/
|
38
|
-
clearBreadcrumbs(): this;
|
39
|
-
/**
|
40
|
-
* @inheritDoc
|
41
|
-
*/
|
42
|
-
setContext(key: string, context: {
|
43
|
-
[key: string]: any;
|
44
|
-
} | null): this;
|
45
|
-
}
|
1
|
+
export {};
|
package/scope.js
CHANGED
@@ -1,72 +1,94 @@
|
|
1
|
-
import { Scope } from '@sentry/hub';
|
2
|
-
import { NSSentry } from './nssentry';
|
3
1
|
/**
|
4
2
|
* Extends the scope methods to set scope on the Native SDKs
|
5
3
|
*/
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
}
|
4
|
+
const methods = ['addBreadcrumb', 'addAttachment'];
|
5
|
+
export {};
|
6
|
+
// methods.forEach(m=>{
|
7
|
+
// const originalMethod =Scope.prototype[m] as Function;
|
8
|
+
// Scope.prototype[m] = function(...args) {
|
9
|
+
// NATIVE[m](...args);
|
10
|
+
// return originalMethod.call(this, ...args);
|
11
|
+
// };
|
12
|
+
// });
|
13
|
+
// export class NativescriptScope extends Scope {
|
14
|
+
// /**
|
15
|
+
// * @inheritDoc
|
16
|
+
// */
|
17
|
+
// public setUser(user: User | null): this {
|
18
|
+
// NATIVE.setUser(user);
|
19
|
+
// return super.setUser(user);
|
20
|
+
// }
|
21
|
+
// /**
|
22
|
+
// * @inheritDoc
|
23
|
+
// */
|
24
|
+
// public setTag(key: string, value: string): this {
|
25
|
+
// NATIVE.setTag(key, value);
|
26
|
+
// return super.setTag(key, value);
|
27
|
+
// }
|
28
|
+
// /**
|
29
|
+
// * @inheritDoc
|
30
|
+
// */
|
31
|
+
// public setTags(tags: { [key: string]: string }): this {
|
32
|
+
// // As native only has setTag, we just loop through each tag key.
|
33
|
+
// Object.keys(tags).forEach((key) => {
|
34
|
+
// NATIVE.setTag(key, tags[key]);
|
35
|
+
// });
|
36
|
+
// return super.setTags(tags);
|
37
|
+
// }
|
38
|
+
// /**
|
39
|
+
// * @inheritDoc
|
40
|
+
// */
|
41
|
+
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
42
|
+
// public setExtras(extras: { [key: string]: any }): this {
|
43
|
+
// Object.keys(extras).forEach((key) => {
|
44
|
+
// NATIVE.setExtra(key, extras[key]);
|
45
|
+
// });
|
46
|
+
// return super.setExtras(extras);
|
47
|
+
// }
|
48
|
+
// /**
|
49
|
+
// * @inheritDoc
|
50
|
+
// */
|
51
|
+
// // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,@typescript-eslint/no-explicit-any
|
52
|
+
// public setExtra(key: string, extra: any): this {
|
53
|
+
// NATIVE.setExtra(key, extra);
|
54
|
+
// return super.setExtra(key, extra);
|
55
|
+
// }
|
56
|
+
// /**
|
57
|
+
// * @inheritDoc
|
58
|
+
// */
|
59
|
+
// public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {
|
60
|
+
// NATIVE.addBreadcrumb(breadcrumb);
|
61
|
+
// return super.addBreadcrumb(breadcrumb, maxBreadcrumbs);
|
62
|
+
// }
|
63
|
+
// /**
|
64
|
+
// * @inheritDoc
|
65
|
+
// */
|
66
|
+
// public clearBreadcrumbs(): this {
|
67
|
+
// NATIVE.clearBreadcrumbs();
|
68
|
+
// return super.clearBreadcrumbs();
|
69
|
+
// }
|
70
|
+
// /**
|
71
|
+
// * @inheritDoc
|
72
|
+
// */
|
73
|
+
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
74
|
+
// public setContext(key: string, context: { [key: string]: any } | null): this {
|
75
|
+
// NATIVE.setContext(key, context);
|
76
|
+
// return this;
|
77
|
+
// // return super.setContext(key, context);
|
78
|
+
// }
|
79
|
+
// /**
|
80
|
+
// * @inheritDoc
|
81
|
+
// */
|
82
|
+
// public addAttachment(attachment: Attachment): this {
|
83
|
+
// console.log('test addAttachment', attachment);
|
84
|
+
// NATIVE.addAttachment(attachment);
|
85
|
+
// return super.addAttachment(attachment);
|
86
|
+
// }
|
87
|
+
// /**
|
88
|
+
// * @inheritDoc
|
89
|
+
// */
|
90
|
+
// public clearAttachments(): this {
|
91
|
+
// return super.clearAttachments();
|
92
|
+
// }
|
93
|
+
// }
|
72
94
|
//# sourceMappingURL=scope.js.map
|
package/scope.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,MAAM,OAAO,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;;AAEnD,uBAAuB;AACvB,4DAA4D;AAC5D,+CAA+C;AAC/C,8BAA8B;AAC9B,qDAAqD;AACrD,SAAS;AACT,MAAM;AAEN,iDAAiD;AACjD,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,gDAAgD;AAChD,gCAAgC;AAChC,sCAAsC;AACtC,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,wDAAwD;AACxD,qCAAqC;AACrC,2CAA2C;AAC3C,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,8DAA8D;AAC9D,uEAAuE;AACvE,+CAA+C;AAC/C,6CAA6C;AAC7C,cAAc;AACd,sCAAsC;AACtC,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,qEAAqE;AACrE,+DAA+D;AAC/D,iDAAiD;AACjD,iDAAiD;AACjD,cAAc;AACd,0CAA0C;AAC1C,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,uHAAuH;AACvH,uDAAuD;AACvD,uCAAuC;AACvC,6CAA6C;AAC7C,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,oFAAoF;AACpF,4CAA4C;AAC5C,kEAAkE;AAClE,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,wCAAwC;AACxC,qCAAqC;AACrC,2CAA2C;AAC3C,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,qEAAqE;AACrE,qFAAqF;AACrF,2CAA2C;AAC3C,uBAAuB;AACvB,oDAAoD;AACpD,QAAQ;AAER,UAAU;AACV,mBAAmB;AACnB,QAAQ;AACR,2DAA2D;AAC3D,yDAAyD;AACzD,4CAA4C;AAC5C,kDAAkD;AAClD,QAAQ;AAER,UAAU;AACV,kBAAkB;AAClB,OAAO;AACP,wCAAwC;AACxC,2CAA2C;AAC3C,QAAQ;AACR,IAAI"}
|
package/sdk.d.ts
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { Hub, Scope } from '@sentry/core';
|
2
|
+
import { StackFrame, UserFeedback } from '@sentry/types';
|
3
|
+
import { NativescriptOptions } from './options';
|
3
4
|
export declare let rewriteFrameIntegration: {
|
4
5
|
_iteratee: (frame: StackFrame) => StackFrame;
|
5
6
|
};
|
6
7
|
/**
|
7
8
|
* Inits the SDK
|
8
9
|
*/
|
9
|
-
export declare function init(
|
10
|
+
export declare function init(passedOptions: NativescriptOptions): void;
|
10
11
|
/**
|
11
12
|
* Sets the release on the event.
|
12
13
|
*/
|
@@ -29,3 +30,26 @@ export declare function flush(): Promise<boolean>;
|
|
29
30
|
* Closes the SDK, stops sending events.
|
30
31
|
*/
|
31
32
|
export declare function close(): Promise<void>;
|
33
|
+
/**
|
34
|
+
* Captures user feedback and sends it to Sentry.
|
35
|
+
*/
|
36
|
+
export declare function captureUserFeedback(feedback: UserFeedback): void;
|
37
|
+
/**
|
38
|
+
* Creates a new scope with and executes the given operation within.
|
39
|
+
* The scope is automatically removed once the operation
|
40
|
+
* finishes or throws.
|
41
|
+
*
|
42
|
+
* This is essentially a convenience function for:
|
43
|
+
*
|
44
|
+
* pushScope();
|
45
|
+
* callback();
|
46
|
+
* popScope();
|
47
|
+
*
|
48
|
+
* @param callback that will be enclosed into push/popScope.
|
49
|
+
*/
|
50
|
+
export declare function withScope(callback: (scope: Scope) => void): ReturnType<Hub['withScope']>;
|
51
|
+
/**
|
52
|
+
* Callback to set context information onto the scope.
|
53
|
+
* @param callback Callback function that receives Scope.
|
54
|
+
*/
|
55
|
+
export declare function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']>;
|
package/sdk.js
CHANGED
@@ -1,32 +1,55 @@
|
|
1
|
-
import { Integrations,
|
2
|
-
import { initAndBind, setExtra } from '@sentry/core';
|
3
|
-
import { Hub, makeMain } from '@sentry/hub';
|
1
|
+
import { Integrations, defaultStackParser, getCurrentHub, defaultIntegrations as sentryDefaultIntegrations } from '@sentry/browser';
|
2
|
+
import { Hub, Scope, getIntegrationsToSetup, initAndBind, makeMain, setExtra } from '@sentry/core';
|
4
3
|
import { RewriteFrames } from '@sentry/integrations';
|
4
|
+
import { logger, stackParserFromStackParserOptions } from '@sentry/utils';
|
5
5
|
import { NativescriptClient } from './client';
|
6
|
-
import {
|
7
|
-
import { NativescriptErrorHandlers, Release } from './integrations';
|
6
|
+
import { DeviceContext, NativescriptErrorHandlers, Release } from './integrations';
|
8
7
|
import { EventOrigin } from './integrations/eventorigin';
|
9
8
|
import { SdkInfo } from './integrations/sdkinfo';
|
9
|
+
// import { NativescriptScope } from './scope';
|
10
|
+
import { NativescriptTracing } from './tracing';
|
11
|
+
import { makeNativescriptTransport } from './transports/native';
|
12
|
+
import { makeUtf8TextEncoder } from './transports/TextEncoder';
|
13
|
+
import { safeFactory, safeTracesSampler } from './utils/safe';
|
14
|
+
import { NATIVE } from './wrapper';
|
10
15
|
const IGNORED_DEFAULT_INTEGRATIONS = [
|
11
16
|
'GlobalHandlers',
|
12
|
-
'Breadcrumbs',
|
13
|
-
'CaptureConsole',
|
17
|
+
// 'Breadcrumbs', // We add it later, just not patching fetch
|
18
|
+
// 'CaptureConsole', // We add it later, just not patching fetch
|
14
19
|
'TryCatch' // We don't need this
|
15
20
|
];
|
21
|
+
const DEFAULT_OPTIONS = {
|
22
|
+
enableNative: true,
|
23
|
+
enableNativeCrashHandling: true,
|
24
|
+
enableNativeNagger: true,
|
25
|
+
autoInitializeNativeSdk: true,
|
26
|
+
enableAutoPerformanceTracking: true,
|
27
|
+
enableOutOfMemoryTracking: true,
|
28
|
+
patchGlobalPromise: true,
|
29
|
+
transportOptions: {
|
30
|
+
textEncoder: makeUtf8TextEncoder(),
|
31
|
+
},
|
32
|
+
sendClientReports: true,
|
33
|
+
};
|
16
34
|
export let rewriteFrameIntegration;
|
17
35
|
/**
|
18
36
|
* Inits the SDK
|
19
37
|
*/
|
20
|
-
export function init(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
}) {
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
38
|
+
export function init(passedOptions) {
|
39
|
+
var _a;
|
40
|
+
const NativescriptHub = new Hub(undefined, new Scope());
|
41
|
+
// const NativescriptHub = new Hub(undefined, new NativescriptScope());
|
42
|
+
makeMain(NativescriptHub);
|
43
|
+
const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS), passedOptions), {
|
44
|
+
// If custom transport factory fails the SDK won't initialize
|
45
|
+
transport: passedOptions.transport || makeNativescriptTransport, transportOptions: Object.assign(Object.assign({}, DEFAULT_OPTIONS.transportOptions), ((_a = passedOptions.transportOptions) !== null && _a !== void 0 ? _a : {})), integrations: [],
|
46
|
+
// integrations: getIntegrationsToSetup(passedOptions),
|
47
|
+
stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser), beforeBreadcrumb: safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' }), initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }), tracesSampler: safeTracesSampler(passedOptions.tracesSampler) });
|
48
|
+
// As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.
|
49
|
+
const tracingEnabled = typeof options.tracesSampler !== 'undefined' ||
|
50
|
+
typeof options.tracesSampleRate !== 'undefined';
|
51
|
+
const defaultIntegrations = passedOptions.defaultIntegrations || [];
|
52
|
+
if (passedOptions.defaultIntegrations === undefined) {
|
30
53
|
rewriteFrameIntegration = new RewriteFrames({
|
31
54
|
iteratee: (frame) => {
|
32
55
|
if (frame.filename) {
|
@@ -36,7 +59,7 @@ export function init(options = {
|
|
36
59
|
.replace(/^.*\/[^\.]+(\.app|CodePush|.*(?=\/))/, ''));
|
37
60
|
// const appPrefix = 'app://';
|
38
61
|
if (frame.filename.indexOf('[native code]') === -1) {
|
39
|
-
const appPrefix = options.appPrefix || '';
|
62
|
+
const appPrefix = options.appPrefix || 'app:///';
|
40
63
|
if (appPrefix.endsWith('//') && !appPrefix.endsWith('///')) {
|
41
64
|
filename = frame.filename.indexOf('/') === 0 ? `${appPrefix}${frame.filename}` : `${appPrefix}/${frame.filename}`;
|
42
65
|
}
|
@@ -50,25 +73,29 @@ export function init(options = {
|
|
50
73
|
return frame;
|
51
74
|
}
|
52
75
|
});
|
53
|
-
|
76
|
+
defaultIntegrations.push(...[
|
54
77
|
new NativescriptErrorHandlers(options),
|
55
78
|
new Release(),
|
56
|
-
...
|
79
|
+
...sentryDefaultIntegrations.filter((i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)),
|
57
80
|
new Integrations.Breadcrumbs(Object.assign({ console: false, xhr: false, dom: false, fetch: false }, (options.breadcrumbs || {}))),
|
58
81
|
rewriteFrameIntegration,
|
59
82
|
new EventOrigin(),
|
60
83
|
new SdkInfo()
|
61
|
-
];
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
84
|
+
]);
|
85
|
+
console.log('test', options.enableNative);
|
86
|
+
if (!!options.enableNative) {
|
87
|
+
defaultIntegrations.push(new DeviceContext());
|
88
|
+
}
|
89
|
+
if (tracingEnabled) {
|
90
|
+
if (options.enableAutoPerformanceTracking) {
|
91
|
+
defaultIntegrations.push(new NativescriptTracing());
|
92
|
+
}
|
93
|
+
}
|
68
94
|
}
|
69
|
-
|
70
|
-
|
71
|
-
|
95
|
+
options.integrations = getIntegrationsToSetup({
|
96
|
+
integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),
|
97
|
+
defaultIntegrations,
|
98
|
+
});
|
72
99
|
initAndBind(NativescriptClient, options);
|
73
100
|
}
|
74
101
|
/**
|
@@ -124,4 +151,52 @@ export async function close() {
|
|
124
151
|
console.error('Failed to close the SDK');
|
125
152
|
}
|
126
153
|
}
|
154
|
+
/**
|
155
|
+
* Captures user feedback and sends it to Sentry.
|
156
|
+
*/
|
157
|
+
export function captureUserFeedback(feedback) {
|
158
|
+
var _a;
|
159
|
+
(_a = getCurrentHub().getClient()) === null || _a === void 0 ? void 0 : _a.captureUserFeedback(feedback);
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* Creates a new scope with and executes the given operation within.
|
163
|
+
* The scope is automatically removed once the operation
|
164
|
+
* finishes or throws.
|
165
|
+
*
|
166
|
+
* This is essentially a convenience function for:
|
167
|
+
*
|
168
|
+
* pushScope();
|
169
|
+
* callback();
|
170
|
+
* popScope();
|
171
|
+
*
|
172
|
+
* @param callback that will be enclosed into push/popScope.
|
173
|
+
*/
|
174
|
+
export function withScope(callback) {
|
175
|
+
const safeCallback = (scope) => {
|
176
|
+
try {
|
177
|
+
NATIVE.withScope(nscope => {
|
178
|
+
callback(scope);
|
179
|
+
});
|
180
|
+
}
|
181
|
+
catch (e) {
|
182
|
+
logger.error('Error while running withScope callback', e);
|
183
|
+
}
|
184
|
+
};
|
185
|
+
getCurrentHub().withScope(safeCallback);
|
186
|
+
}
|
187
|
+
/**
|
188
|
+
* Callback to set context information onto the scope.
|
189
|
+
* @param callback Callback function that receives Scope.
|
190
|
+
*/
|
191
|
+
export function configureScope(callback) {
|
192
|
+
const safeCallback = (scope) => {
|
193
|
+
try {
|
194
|
+
callback(scope);
|
195
|
+
}
|
196
|
+
catch (e) {
|
197
|
+
logger.error('Error while running configureScope callback', e);
|
198
|
+
}
|
199
|
+
};
|
200
|
+
getCurrentHub().configureScope(safeCallback);
|
201
|
+
}
|
127
202
|
//# sourceMappingURL=sdk.js.map
|
package/sdk.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|
package/tracing/index.d.ts
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
export {
|
1
|
+
export { NativescriptTracing } from './nstracing';
|
2
|
+
export { RoutingInstrumentation, RoutingInstrumentationInstance, } from './routingInstrumentation';
|
package/tracing/index.js
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
-
export {
|
2
|
-
|
3
|
-
// export { ReactNavigationV4Instrumentation } from "./reactnavigationv4";
|
1
|
+
export { NativescriptTracing } from './nstracing';
|
2
|
+
export { RoutingInstrumentation, } from './routingInstrumentation';
|
4
3
|
// export {
|
5
|
-
//
|
6
|
-
//
|
7
|
-
//
|
4
|
+
// ReactNavigationInstrumentation,
|
5
|
+
// // eslint-disable-next-line deprecation/deprecation
|
6
|
+
// ReactNavigationV5Instrumentation,
|
7
|
+
// } from './reactnavigation';
|
8
|
+
// export { ReactNavigationV4Instrumentation } from './reactnavigationv4';
|
9
|
+
// export { NativescriptNavigationInstrumentation } from './reactnativenavigation';
|
10
|
+
// export {
|
11
|
+
// ReactNavigationCurrentRoute,
|
12
|
+
// ReactNavigationRoute,
|
13
|
+
// ReactNavigationTransactionContext,
|
14
|
+
// } from './types';
|
15
|
+
// export { NativescriptProfiler } from './reactnativeprofiler';
|
8
16
|
//# sourceMappingURL=index.js.map
|
package/tracing/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EACH,sBAAsB,GAEzB,MAAM,0BAA0B,CAAC;AAElC,WAAW;AACX,sCAAsC;AACtC,0DAA0D;AAC1D,wCAAwC;AACxC,8BAA8B;AAC9B,0EAA0E;AAC1E,mFAAmF;AAEnF,WAAW;AACX,mCAAmC;AACnC,4BAA4B;AAC5B,yCAAyC;AACzC,oBAAoB;AAEpB,gEAAgE"}
|