@sentry/react-native 5.9.1 → 5.10.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.
- package/CHANGELOG.md +29 -1
- package/RNSentry.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +3 -0
- package/dist/js/NativeRNSentry.d.ts +8 -8
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/breadcrumb.d.ts +1 -1
- package/dist/js/breadcrumb.d.ts.map +1 -1
- package/dist/js/client.js.map +1 -1
- package/dist/js/integrations/debugsymbolicator.d.ts +1 -1
- package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
- package/dist/js/integrations/debugsymbolicator.js +2 -2
- package/dist/js/integrations/debugsymbolicator.js.map +1 -1
- package/dist/js/integrations/devicecontext.js.map +1 -1
- package/dist/js/integrations/eventorigin.js.map +1 -1
- package/dist/js/integrations/reactnativeinfo.d.ts +1 -0
- package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeinfo.js +31 -1
- package/dist/js/integrations/reactnativeinfo.js.map +1 -1
- package/dist/js/integrations/release.js.map +1 -1
- package/dist/js/integrations/rewriteframes.d.ts.map +1 -1
- package/dist/js/integrations/rewriteframes.js +9 -1
- package/dist/js/integrations/rewriteframes.js.map +1 -1
- package/dist/js/integrations/sdkinfo.d.ts +1 -1
- package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
- package/dist/js/measurements.d.ts +1 -1
- package/dist/js/measurements.d.ts.map +1 -1
- package/dist/js/misc.d.ts +1 -1
- package/dist/js/misc.d.ts.map +1 -1
- package/dist/js/misc.js.map +1 -1
- package/dist/js/options.d.ts +9 -3
- package/dist/js/options.d.ts.map +1 -1
- package/dist/js/options.js.map +1 -1
- package/dist/js/profiling/hermes.d.ts +2 -2
- package/dist/js/profiling/hermes.d.ts.map +1 -1
- package/dist/js/profiling/integration.d.ts +4 -1
- package/dist/js/profiling/integration.d.ts.map +1 -1
- package/dist/js/profiling/integration.js +20 -13
- package/dist/js/profiling/integration.js.map +1 -1
- package/dist/js/profiling/utils.js +1 -1
- package/dist/js/profiling/utils.js.map +1 -1
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +5 -4
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/ModulesCollector.js +8 -8
- package/dist/js/tools/ModulesCollector.js.map +1 -1
- package/dist/js/touchevents.d.ts +2 -2
- package/dist/js/touchevents.d.ts.map +1 -1
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/gesturetracing.js.map +1 -1
- package/dist/js/tracing/nativeframes.js.map +1 -1
- package/dist/js/tracing/reactnativenavigation.d.ts +1 -1
- package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnativenavigation.js.map +1 -1
- package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
- package/dist/js/tracing/reactnativetracing.js +4 -6
- package/dist/js/tracing/reactnativetracing.js.map +1 -1
- package/dist/js/tracing/reactnavigation.js.map +1 -1
- package/dist/js/tracing/reactnavigationv4.js.map +1 -1
- package/dist/js/tracing/routingInstrumentation.d.ts +2 -2
- package/dist/js/tracing/routingInstrumentation.d.ts.map +1 -1
- package/dist/js/tracing/routingInstrumentation.js.map +1 -1
- package/dist/js/tracing/stalltracking.d.ts +1 -1
- package/dist/js/tracing/stalltracking.d.ts.map +1 -1
- package/dist/js/tracing/stalltracking.js.map +1 -1
- package/dist/js/tracing/transaction.d.ts +1 -1
- package/dist/js/tracing/transaction.d.ts.map +1 -1
- package/dist/js/tracing/transaction.js.map +1 -1
- package/dist/js/tracing/types.d.ts +2 -2
- package/dist/js/tracing/types.d.ts.map +1 -1
- package/dist/js/transports/native.d.ts +1 -1
- package/dist/js/transports/native.d.ts.map +1 -1
- package/dist/js/user.d.ts +1 -1
- package/dist/js/user.d.ts.map +1 -1
- package/dist/js/utils/safe.d.ts +1 -1
- package/dist/js/utils/safe.d.ts.map +1 -1
- 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.js +1 -1
- package/dist/js/wrapper.js.map +1 -1
- package/ios/RNSentry.mm +1 -1
- package/package.json +15 -15
- package/ts3.8/dist/js/NativeRNSentry.d.ts +8 -8
- package/ts3.8/dist/js/breadcrumb.d.ts +1 -1
- package/ts3.8/dist/js/integrations/debugsymbolicator.d.ts +1 -1
- package/ts3.8/dist/js/integrations/reactnativeinfo.d.ts +1 -0
- package/ts3.8/dist/js/integrations/sdkinfo.d.ts +1 -1
- package/ts3.8/dist/js/measurements.d.ts +1 -1
- package/ts3.8/dist/js/misc.d.ts +1 -1
- package/ts3.8/dist/js/options.d.ts +9 -3
- package/ts3.8/dist/js/profiling/hermes.d.ts +2 -2
- package/ts3.8/dist/js/profiling/integration.d.ts +4 -1
- package/ts3.8/dist/js/touchevents.d.ts +2 -2
- package/ts3.8/dist/js/tracing/reactnativenavigation.d.ts +1 -1
- package/ts3.8/dist/js/tracing/routingInstrumentation.d.ts +2 -2
- package/ts3.8/dist/js/tracing/stalltracking.d.ts +1 -1
- package/ts3.8/dist/js/tracing/transaction.d.ts +1 -1
- package/ts3.8/dist/js/tracing/types.d.ts +2 -2
- package/ts3.8/dist/js/transports/native.d.ts +1 -1
- package/ts3.8/dist/js/user.d.ts +1 -1
- package/ts3.8/dist/js/utils/safe.d.ts +1 -1
- package/ts3.8/dist/js/version.d.ts +1 -1
package/dist/js/options.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { BrowserTransportOptions } from '@sentry/browser/types/transports/types';
|
|
2
2
|
import type { ProfilerProps } from '@sentry/react/types/profiler';
|
|
3
|
-
import type { ClientOptions, Options } from '@sentry/types';
|
|
4
|
-
import type { CaptureContext } from '@sentry/types/types/scope';
|
|
3
|
+
import type { CaptureContext, ClientOptions, Options } from '@sentry/types';
|
|
5
4
|
import type { TouchEventBoundaryProps } from './touchevents';
|
|
6
5
|
export interface BaseReactNativeOptions {
|
|
7
6
|
/**
|
|
@@ -34,7 +33,14 @@ export interface BaseReactNativeOptions {
|
|
|
34
33
|
enableAutoSessionTracking?: boolean;
|
|
35
34
|
/** The interval to end a session if the App goes to the background. */
|
|
36
35
|
sessionTrackingIntervalMillis?: number;
|
|
37
|
-
/** Enable
|
|
36
|
+
/** Enable NDK on Android
|
|
37
|
+
*
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
enableNdk?: boolean;
|
|
41
|
+
/** Enable scope sync from Java to NDK on Android
|
|
42
|
+
* Only has an effect if `enableNdk` is `true`.
|
|
43
|
+
*/
|
|
38
44
|
enableNdkScopeSync?: boolean;
|
|
39
45
|
/** When enabled, all the threads are automatically attached to all logged events on Android */
|
|
40
46
|
attachThreads?: boolean;
|
package/dist/js/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,0DAA0D;IAC1D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,uEAAuE;IACvE,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;QACnB,yEAAyE;QACzE,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,IAAI,CAAC;IAEX,uGAAuG;IACvG,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC;;;;;;;;OAQG;IACH,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAE5C;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;IAE9B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;;;;;OASG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AAEH,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,2BAA2B,CAAC,EAAE,sBAAsB;CAAG;AAE3G,MAAM,WAAW,wBAAyB,SAAQ,aAAa,CAAC,2BAA2B,CAAC,EAAE,sBAAsB;CAAG;AAEvH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD"}
|
package/dist/js/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { BrowserTransportOptions } from '@sentry/browser/types/transports/types';\nimport type { ProfilerProps } from '@sentry/react/types/profiler';\nimport type { ClientOptions, Options } from '@sentry/types';\
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { BrowserTransportOptions } from '@sentry/browser/types/transports/types';\nimport type { ProfilerProps } from '@sentry/react/types/profiler';\nimport type { CaptureContext, ClientOptions, Options } from '@sentry/types';\n\nimport type { TouchEventBoundaryProps } from './touchevents';\n\nexport interface BaseReactNativeOptions {\n /**\n * Enables native transport + device info + offline caching.\n * Be careful, disabling this also breaks automatic release setting.\n * This means you have to manage setting the release yourself.\n * Defaults to `true`.\n */\n enableNative?: boolean;\n\n /**\n * Enables native crashHandling. This only works if `enableNative` is `true`.\n * Defaults to `true`.\n */\n enableNativeCrashHandling?: boolean;\n\n /**\n * Initializes the native SDK on init.\n * Set this to `false` if you have an existing native SDK and don't want to re-initialize.\n *\n * NOTE: Be careful and only use this if you know what you are doing.\n * If you use this flag, make sure a native SDK is running before the JS Engine initializes or events might not be captured.\n * Also, make sure the DSN on both the React Native side and the native side are the same one.\n * We strongly recommend checking the documentation if you need to use this.\n *\n * @default true\n */\n autoInitializeNativeSdk?: boolean;\n\n /** Should the native nagger alert be shown or not. */\n enableNativeNagger?: boolean;\n\n /** Should sessions be tracked to Sentry Health or not. */\n enableAutoSessionTracking?: boolean;\n\n /** The interval to end a session if the App goes to the background. */\n sessionTrackingIntervalMillis?: number;\n\n /** Enable NDK on Android\n *\n * @default true\n */\n enableNdk?: boolean;\n\n /** Enable scope sync from Java to NDK on Android\n * Only has an effect if `enableNdk` is `true`.\n */\n enableNdkScopeSync?: boolean;\n\n /** When enabled, all the threads are automatically attached to all logged events on Android */\n attachThreads?: boolean;\n\n /**\n * When enabled, certain personally identifiable information (PII) is added by active integrations.\n *\n * @default false\n */\n sendDefaultPii?: boolean;\n\n /**\n * Callback that is called after the RN SDK on the JS Layer has made contact with the Native Layer.\n */\n onReady?: (response: {\n /** `true` if the native SDK has been initialized, `false` otherwise. */\n didCallNativeInit: boolean;\n }) => void;\n\n /** Enable auto performance tracking by default. Renamed from `enableAutoPerformanceTracking` in v5. */\n enableAutoPerformanceTracing?: boolean;\n\n /**\n * Enables Out of Memory Tracking for iOS and macCatalyst.\n * See the following link for more information and possible restrictions:\n * https://docs.sentry.io/platforms/apple/guides/ios/configuration/out-of-memory/\n *\n * Renamed from `enableOutOfMemoryTracking` in v5.\n *\n * @default true\n */\n enableWatchdogTerminationTracking?: boolean;\n\n /**\n * Set data to the inital scope\n * @deprecated Use `Sentry.configureScope(...)`\n */\n initialScope?: CaptureContext;\n\n /**\n * When enabled, Sentry will overwrite the global Promise instance to ensure that unhandled rejections are correctly tracked.\n * If you run into issues with Promise polyfills such as `core-js`, make sure you polyfill after Sentry is initialized.\n * Read more at https://docs.sentry.io/platforms/react-native/troubleshooting/#unhandled-promise-rejections\n *\n * When disabled, this option will not disable unhandled rejection tracking. Set `onunhandledrejection: false` on the `ReactNativeErrorHandlers` integration instead.\n *\n * @default true\n */\n patchGlobalPromise?: boolean;\n\n /**\n * The max cache items for capping the number of envelopes.\n *\n * @default 30\n */\n maxCacheItems?: number;\n\n /**\n * When enabled, the SDK tracks when the application stops responding for a specific amount of\n * time defined by the `appHangTimeoutInterval` option.\n *\n * iOS only\n *\n * @default true\n */\n enableAppHangTracking?: boolean;\n\n /**\n * The minimum amount of time an app should be unresponsive to be classified as an App Hanging.\n * The actual amount may be a little longer.\n * Avoid using values lower than 100ms, which may cause a lot of app hangs events being transmitted.\n * Value should be in seconds.\n *\n * iOS only\n *\n * @default 2\n */\n appHangTimeoutInterval?: number;\n\n /**\n * The max queue size for capping the number of envelopes waiting to be sent by Transport.\n */\n maxQueueSize?: number;\n\n /**\n * When enabled and a user experiences an error, Sentry provides the ability to take a screenshot and include it as an attachment.\n *\n * @default false\n */\n attachScreenshot?: boolean;\n\n /**\n * When enabled Sentry includes the current view hierarchy in the error attachments.\n *\n * @default false\n */\n attachViewHierarchy?: boolean;\n\n /**\n * When enabled, Sentry will capture failed XHR/Fetch requests. This option also enabled HTTP Errors on iOS.\n * [Sentry Android Gradle Plugin](https://docs.sentry.io/platforms/android/configuration/integrations/okhttp/)\n * is needed to capture HTTP Errors on Android.\n *\n * @default false\n */\n enableCaptureFailedRequests?: boolean;\n}\n\nexport interface ReactNativeTransportOptions extends BrowserTransportOptions {\n /**\n * @deprecated use `maxQueueSize` in the root of the SDK options.\n */\n bufferSize?: number;\n}\n\n/**\n * Configuration options for the Sentry ReactNative SDK.\n * @see ReactNativeFrontend for more information.\n */\n\nexport interface ReactNativeOptions extends Options<ReactNativeTransportOptions>, BaseReactNativeOptions {}\n\nexport interface ReactNativeClientOptions extends ClientOptions<ReactNativeTransportOptions>, BaseReactNativeOptions {}\n\nexport interface ReactNativeWrapperOptions {\n /** Props for the root React profiler */\n profilerProps?: ProfilerProps;\n\n /** Props for the root touch event boundary */\n touchEventBoundaryProps?: TouchEventBoundaryProps;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RawThreadCpuProfile } from './types';
|
|
2
|
-
export
|
|
3
|
-
export
|
|
2
|
+
export type StackFrameId = number;
|
|
3
|
+
export type MicrosecondsSinceBoot = string;
|
|
4
4
|
export interface TraceEvent {
|
|
5
5
|
name: string;
|
|
6
6
|
ph: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../../src/js/profiling/hermes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,
|
|
1
|
+
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../../src/js/profiling/hermes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,qBAAqB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,qBAAqB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI5E;AAID;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAQ9C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,mBAAmB,GAAG,IAAI,CAM1D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Hub } from '@sentry/core';
|
|
2
|
+
import type { EventProcessor, Integration } from '@sentry/types';
|
|
2
3
|
export declare const MAX_PROFILE_DURATION_MS: number;
|
|
3
4
|
/**
|
|
4
5
|
* Profiling integration creates a profile for each transaction and adds it to the event envelope.
|
|
@@ -21,6 +22,8 @@ export declare class HermesProfiling implements Integration {
|
|
|
21
22
|
* @inheritDoc
|
|
22
23
|
*/
|
|
23
24
|
setupOnce(_: (e: EventProcessor) => void, getCurrentHub: () => Hub): void;
|
|
25
|
+
private _startCurrentProfileForActiveTransaction;
|
|
26
|
+
private _startCurrentProfile;
|
|
24
27
|
private _shouldStartProfiling;
|
|
25
28
|
/**
|
|
26
29
|
* Starts a new profile and links it to the transaction.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/js/profiling/integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/js/profiling/integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,EAAmB,cAAc,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAQxG,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAqB;IAE7C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAsB;IAEzC,OAAO,CAAC,cAAc,CAAC,CAAY;IAEnC,OAAO,CAAC,eAAe,CAKT;IAEd,OAAO,CAAC,sBAAsB,CAAqB;IAEnD;;OAEG;IACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG,IAAI;IAwChF,OAAO,CAAC,wCAAwC,CAM9C;IAEF,OAAO,CAAC,oBAAoB,CAU1B;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB,CActB;IAEF;;OAEG;IACH,OAAO,CAAC,qBAAqB,CAiB3B;IAEF,OAAO,CAAC,sBAAsB,CAwB5B;IAEF,OAAO,CAAC,2BAA2B,CAGjC;CACH"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getActiveTransaction } from '@sentry/core';
|
|
1
2
|
import { logger, uuid4 } from '@sentry/utils';
|
|
2
3
|
import { isHermesEnabled } from '../utils/environment';
|
|
3
4
|
import { PROFILE_QUEUE } from './cache';
|
|
@@ -15,6 +16,22 @@ export class HermesProfiling {
|
|
|
15
16
|
* @inheritDoc
|
|
16
17
|
*/
|
|
17
18
|
this.name = HermesProfiling.id;
|
|
19
|
+
this._startCurrentProfileForActiveTransaction = () => {
|
|
20
|
+
if (this._currentProfile) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const transaction = this._getCurrentHub && getActiveTransaction(this._getCurrentHub());
|
|
24
|
+
transaction && this._startCurrentProfile(transaction);
|
|
25
|
+
};
|
|
26
|
+
this._startCurrentProfile = (transaction) => {
|
|
27
|
+
this._finishCurrentProfile();
|
|
28
|
+
const shouldStartProfiling = this._shouldStartProfiling(transaction);
|
|
29
|
+
if (!shouldStartProfiling) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this._currentProfileTimeout = setTimeout(this._finishCurrentProfile, MAX_PROFILE_DURATION_MS);
|
|
33
|
+
this._startNewProfile(transaction);
|
|
34
|
+
};
|
|
18
35
|
this._shouldStartProfiling = (transaction) => {
|
|
19
36
|
if (!transaction.sampled) {
|
|
20
37
|
logger.log('[Profiling] Transaction is not sampled, skipping profiling');
|
|
@@ -22,7 +39,6 @@ export class HermesProfiling {
|
|
|
22
39
|
}
|
|
23
40
|
const client = this._getCurrentHub && this._getCurrentHub().getClient();
|
|
24
41
|
const options = client && client.getOptions();
|
|
25
|
-
// @ts-ignore not part of the browser options yet
|
|
26
42
|
const profilesSampleRate = options && options._experiments && typeof options._experiments.profilesSampleRate === 'number'
|
|
27
43
|
? options._experiments.profilesSampleRate
|
|
28
44
|
: undefined;
|
|
@@ -112,18 +128,9 @@ export class HermesProfiling {
|
|
|
112
128
|
if (!client || typeof client.on !== 'function') {
|
|
113
129
|
return;
|
|
114
130
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (!shouldStartProfiling) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
this._currentProfileTimeout = setTimeout(this._finishCurrentProfile, MAX_PROFILE_DURATION_MS);
|
|
122
|
-
this._startNewProfile(transaction);
|
|
123
|
-
});
|
|
124
|
-
client.on('finishTransaction', () => {
|
|
125
|
-
this._finishCurrentProfile();
|
|
126
|
-
});
|
|
131
|
+
this._startCurrentProfileForActiveTransaction();
|
|
132
|
+
client.on('startTransaction', this._startCurrentProfile);
|
|
133
|
+
client.on('finishTransaction', this._finishCurrentProfile);
|
|
127
134
|
client.on('beforeEnvelope', (envelope) => {
|
|
128
135
|
if (!PROFILE_QUEUE.size()) {
|
|
129
136
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../src/js/profiling/integration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Envelope, Event, EventProcessor, Hub, Integration, Profile, Transaction } from '@sentry/types';\nimport { logger, uuid4 } from '@sentry/utils';\n\nimport { isHermesEnabled } from '../utils/environment';\nimport { PROFILE_QUEUE } from './cache';\nimport { startProfiling, stopProfiling } from './hermes';\nimport { addProfilesToEnvelope, createProfilingEvent, findProfiledTransactionsFromEnvelope } from './utils';\n\nexport const MAX_PROFILE_DURATION_MS = 30 * 1e3;\n\n/**\n * Profiling integration creates a profile for each transaction and adds it to the event envelope.\n *\n * @experimental\n */\nexport class HermesProfiling implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'HermesProfiling';\n\n /**\n * @inheritDoc\n */\n public name: string = HermesProfiling.id;\n\n private _getCurrentHub?: () => Hub;\n\n private _currentProfile:\n | {\n profile_id: string;\n startTimestampNs: number;\n }\n | undefined;\n\n private _currentProfileTimeout: number | undefined;\n\n /**\n * @inheritDoc\n */\n public setupOnce(_: (e: EventProcessor) => void, getCurrentHub: () => Hub): void {\n if (!isHermesEnabled()) {\n logger.log('[Profiling] Hermes is not enabled, not adding profiling integration.');\n return;\n }\n\n this._getCurrentHub = getCurrentHub;\n const client = getCurrentHub().getClient();\n\n if (!client || typeof client.on !== 'function') {\n return;\n }\n\n client.on('startTransaction', (transaction: Transaction) => {\n this._finishCurrentProfile();\n\n const shouldStartProfiling = this._shouldStartProfiling(transaction);\n if (!shouldStartProfiling) {\n return;\n }\n\n this._currentProfileTimeout = setTimeout(this._finishCurrentProfile, MAX_PROFILE_DURATION_MS);\n this._startNewProfile(transaction);\n });\n\n client.on('finishTransaction', () => {\n this._finishCurrentProfile();\n });\n\n client.on('beforeEnvelope', (envelope: Envelope) => {\n if (!PROFILE_QUEUE.size()) {\n return;\n }\n\n const profiledTransactions = findProfiledTransactionsFromEnvelope(envelope);\n if (!profiledTransactions.length) {\n logger.log('[Profiling] no profiled transactions found in envelope');\n return;\n }\n\n const profilesToAddToEnvelope: Profile[] = [];\n for (const profiledTransaction of profiledTransactions) {\n const profile = this._createProfileEventFor(profiledTransaction);\n if (profile) {\n profilesToAddToEnvelope.push(profile);\n }\n }\n addProfilesToEnvelope(envelope, profilesToAddToEnvelope);\n });\n }\n\n private _shouldStartProfiling = (transaction: Transaction): boolean => {\n if (!transaction.sampled) {\n logger.log('[Profiling] Transaction is not sampled, skipping profiling');\n return false;\n }\n\n const client = this._getCurrentHub && this._getCurrentHub().getClient();\n const options = client && client.getOptions();\n\n // @ts-ignore not part of the browser options yet\n const profilesSampleRate =\n options && options._experiments && typeof options._experiments.profilesSampleRate === 'number'\n ? options._experiments.profilesSampleRate\n : undefined;\n if (profilesSampleRate === undefined) {\n logger.log('[Profiling] Profiling disabled, enable it by setting `profilesSampleRate` option to SDK init call.');\n return false;\n }\n\n // Check if we should sample this profile\n if (Math.random() > profilesSampleRate) {\n logger.log('[Profiling] Skip profiling transaction due to sampling.');\n return false;\n }\n\n return true;\n };\n\n /**\n * Starts a new profile and links it to the transaction.\n */\n private _startNewProfile = (transaction: Transaction): void => {\n const profileStartTimestampNs = startProfiling();\n if (!profileStartTimestampNs) {\n return;\n }\n\n this._currentProfile = {\n profile_id: uuid4(),\n startTimestampNs: profileStartTimestampNs,\n };\n transaction.setContext('profile', { profile_id: this._currentProfile.profile_id });\n // @ts-expect-error profile_id is not part of the metadata type\n transaction.setMetadata({ profile_id: this._currentProfile.profile_id });\n logger.log('[Profiling] started profiling: ', this._currentProfile.profile_id);\n };\n\n /**\n * Stops profiling and adds the profile to the queue to be processed on beforeEnvelope.\n */\n private _finishCurrentProfile = (): void => {\n this._clearCurrentProfileTimeout();\n if (this._currentProfile === undefined) {\n return;\n }\n\n const profile = stopProfiling();\n if (!profile) {\n logger.warn('[Profiling] Stop failed. Cleaning up...');\n this._currentProfile = undefined;\n return;\n }\n\n profile.profile_id = this._currentProfile.profile_id;\n PROFILE_QUEUE.add(profile.profile_id, profile);\n logger.log('[Profiling] finished profiling: ', this._currentProfile.profile_id);\n this._currentProfile = undefined;\n };\n\n private _createProfileEventFor = (profiledTransaction: Event): Profile | null => {\n const profile_id = profiledTransaction?.contexts?.['profile']?.['profile_id'];\n\n if (typeof profile_id !== 'string') {\n logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n return null;\n }\n\n // Remove the profile from the transaction context before sending, relay will take care of the rest.\n if (profiledTransaction?.contexts?.['.profile']) {\n delete profiledTransaction.contexts.profile;\n }\n\n const cpuProfile = PROFILE_QUEUE.get(profile_id);\n PROFILE_QUEUE.delete(profile_id);\n\n if (!cpuProfile) {\n logger.log(`[Profiling] cannot find profile ${profile_id} for transaction ${profiledTransaction.event_id}`);\n return null;\n }\n\n const profile = createProfilingEvent(cpuProfile, profiledTransaction);\n logger.log(`[Profiling] Created profile ${profile_id} for transaction ${profiledTransaction.event_id}`);\n return profile;\n };\n\n private _clearCurrentProfileTimeout = (): void => {\n this._currentProfileTimeout !== undefined && clearTimeout(this._currentProfileTimeout);\n this._currentProfileTimeout = undefined;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../src/js/profiling/integration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hub } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport type { Envelope, Event, EventProcessor, Integration, Profile, Transaction } from '@sentry/types';\nimport { logger, uuid4 } from '@sentry/utils';\n\nimport { isHermesEnabled } from '../utils/environment';\nimport { PROFILE_QUEUE } from './cache';\nimport { startProfiling, stopProfiling } from './hermes';\nimport { addProfilesToEnvelope, createProfilingEvent, findProfiledTransactionsFromEnvelope } from './utils';\n\nexport const MAX_PROFILE_DURATION_MS = 30 * 1e3;\n\n/**\n * Profiling integration creates a profile for each transaction and adds it to the event envelope.\n *\n * @experimental\n */\nexport class HermesProfiling implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'HermesProfiling';\n\n /**\n * @inheritDoc\n */\n public name: string = HermesProfiling.id;\n\n private _getCurrentHub?: () => Hub;\n\n private _currentProfile:\n | {\n profile_id: string;\n startTimestampNs: number;\n }\n | undefined;\n\n private _currentProfileTimeout: number | undefined;\n\n /**\n * @inheritDoc\n */\n public setupOnce(_: (e: EventProcessor) => void, getCurrentHub: () => Hub): void {\n if (!isHermesEnabled()) {\n logger.log('[Profiling] Hermes is not enabled, not adding profiling integration.');\n return;\n }\n\n this._getCurrentHub = getCurrentHub;\n const client = getCurrentHub().getClient();\n\n if (!client || typeof client.on !== 'function') {\n return;\n }\n\n this._startCurrentProfileForActiveTransaction();\n client.on('startTransaction', this._startCurrentProfile);\n\n client.on('finishTransaction', this._finishCurrentProfile);\n\n client.on('beforeEnvelope', (envelope: Envelope) => {\n if (!PROFILE_QUEUE.size()) {\n return;\n }\n\n const profiledTransactions = findProfiledTransactionsFromEnvelope(envelope);\n if (!profiledTransactions.length) {\n logger.log('[Profiling] no profiled transactions found in envelope');\n return;\n }\n\n const profilesToAddToEnvelope: Profile[] = [];\n for (const profiledTransaction of profiledTransactions) {\n const profile = this._createProfileEventFor(profiledTransaction);\n if (profile) {\n profilesToAddToEnvelope.push(profile);\n }\n }\n addProfilesToEnvelope(envelope, profilesToAddToEnvelope);\n });\n }\n\n private _startCurrentProfileForActiveTransaction = (): void => {\n if (this._currentProfile) {\n return;\n }\n const transaction = this._getCurrentHub && getActiveTransaction(this._getCurrentHub());\n transaction && this._startCurrentProfile(transaction);\n };\n\n private _startCurrentProfile = (transaction: Transaction): void => {\n this._finishCurrentProfile();\n\n const shouldStartProfiling = this._shouldStartProfiling(transaction);\n if (!shouldStartProfiling) {\n return;\n }\n\n this._currentProfileTimeout = setTimeout(this._finishCurrentProfile, MAX_PROFILE_DURATION_MS);\n this._startNewProfile(transaction);\n };\n\n private _shouldStartProfiling = (transaction: Transaction): boolean => {\n if (!transaction.sampled) {\n logger.log('[Profiling] Transaction is not sampled, skipping profiling');\n return false;\n }\n\n const client = this._getCurrentHub && this._getCurrentHub().getClient();\n const options = client && client.getOptions();\n\n const profilesSampleRate =\n options && options._experiments && typeof options._experiments.profilesSampleRate === 'number'\n ? options._experiments.profilesSampleRate\n : undefined;\n if (profilesSampleRate === undefined) {\n logger.log('[Profiling] Profiling disabled, enable it by setting `profilesSampleRate` option to SDK init call.');\n return false;\n }\n\n // Check if we should sample this profile\n if (Math.random() > profilesSampleRate) {\n logger.log('[Profiling] Skip profiling transaction due to sampling.');\n return false;\n }\n\n return true;\n };\n\n /**\n * Starts a new profile and links it to the transaction.\n */\n private _startNewProfile = (transaction: Transaction): void => {\n const profileStartTimestampNs = startProfiling();\n if (!profileStartTimestampNs) {\n return;\n }\n\n this._currentProfile = {\n profile_id: uuid4(),\n startTimestampNs: profileStartTimestampNs,\n };\n transaction.setContext('profile', { profile_id: this._currentProfile.profile_id });\n // @ts-expect-error profile_id is not part of the metadata type\n transaction.setMetadata({ profile_id: this._currentProfile.profile_id });\n logger.log('[Profiling] started profiling: ', this._currentProfile.profile_id);\n };\n\n /**\n * Stops profiling and adds the profile to the queue to be processed on beforeEnvelope.\n */\n private _finishCurrentProfile = (): void => {\n this._clearCurrentProfileTimeout();\n if (this._currentProfile === undefined) {\n return;\n }\n\n const profile = stopProfiling();\n if (!profile) {\n logger.warn('[Profiling] Stop failed. Cleaning up...');\n this._currentProfile = undefined;\n return;\n }\n\n profile.profile_id = this._currentProfile.profile_id;\n PROFILE_QUEUE.add(profile.profile_id, profile);\n logger.log('[Profiling] finished profiling: ', this._currentProfile.profile_id);\n this._currentProfile = undefined;\n };\n\n private _createProfileEventFor = (profiledTransaction: Event): Profile | null => {\n const profile_id = profiledTransaction?.contexts?.['profile']?.['profile_id'];\n\n if (typeof profile_id !== 'string') {\n logger.log('[Profiling] cannot find profile for a transaction without a profile context');\n return null;\n }\n\n // Remove the profile from the transaction context before sending, relay will take care of the rest.\n if (profiledTransaction?.contexts?.['.profile']) {\n delete profiledTransaction.contexts.profile;\n }\n\n const cpuProfile = PROFILE_QUEUE.get(profile_id);\n PROFILE_QUEUE.delete(profile_id);\n\n if (!cpuProfile) {\n logger.log(`[Profiling] cannot find profile ${profile_id} for transaction ${profiledTransaction.event_id}`);\n return null;\n }\n\n const profile = createProfilingEvent(cpuProfile, profiledTransaction);\n logger.log(`[Profiling] Created profile ${profile_id} for transaction ${profiledTransaction.event_id}`);\n return profile;\n };\n\n private _clearCurrentProfileTimeout = (): void => {\n this._currentProfileTimeout !== undefined && clearTimeout(this._currentProfileTimeout);\n this._currentProfileTimeout = undefined;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/profiling/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5D,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAA4B;IACzD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;QAC/B,IAAI,OAAO,EAAE;YACX,6EAA6E;YAC7E,8EAA8E;YAC9E,gEAAgE;YAChE,MAAM,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;SACtF;QACD,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAAC,QAAkB;IACrE,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,mBAAmB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3C,IAAI,IAAI,KAAK,aAAa,EAAE;YAC1B,OAAO;SACR;QAED,yBAAyB;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,8CAA8C;YAC9C,sEAAsE;YACtE,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE;gBACnG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAU,CAAC,CAAC;aAC/B;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4B,EAAE,KAAY;;IAC7E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAC;KACb;IAED,OAAO,oBAAoB,CAAC,OAAO,EAAE;QACnC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QACpC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QAClF,QAAQ,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/profiling/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Envelope, Event, Profile } from '@sentry/types';\nimport { forEachEnvelopeItem, logger } from '@sentry/utils';\n\nimport type { RawThreadCpuProfile } from './types';\n\nconst ACTIVE_THREAD_ID_STRING = '0';\n\n/**\n *\n */\nexport function isValidProfile(profile: RawThreadCpuProfile): profile is RawThreadCpuProfile & { profile_id: string } {\n if (profile.samples.length <= 1) {\n if (__DEV__) {\n // Log a warning if the profile has less than 2 samples so users can know why\n // they are not seeing any profiling data and we cant avoid the back and forth\n // of asking them to provide us with a dump of the profile data.\n logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n }\n return false;\n }\n\n if (!profile.profile_id) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n const events: Event[] = [];\n\n forEachEnvelopeItem(envelope, (item, type) => {\n if (type !== 'transaction') {\n return;\n }\n\n // First item is the type\n for (let j = 1; j < item.length; j++) {\n const event = item[j];\n\n // @ts-expect-error accessing private property\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event && event.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) {\n events.push(item[j] as Event);\n }\n }\n });\n\n return events;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nexport function createProfilingEvent(profile: RawThreadCpuProfile, event: Event): Profile | null {\n if (!isValidProfile(profile)) {\n return null;\n }\n\n return createProfilePayload(profile, {\n release: event.release || '',\n environment: event.environment || '',\n event_id: event.event_id || '',\n transaction: event.transaction || '',\n start_timestamp: event.start_timestamp ? event.start_timestamp * 1000 : Date.now(),\n trace_id: (event?.contexts?.trace?.trace_id as string) ?? '',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n profile_id: profile.profile_id,\n os_platform: event.contexts?.os?.name || '',\n os_version: event.contexts?.os?.version || '',\n os_build: event.contexts?.os?.build || '',\n device_locale: (event.contexts?.device?.locale as string) || '',\n device_model: event.contexts?.device?.model || '',\n device_manufacturer: event.contexts?.device?.manufacturer || '',\n device_architecture: event.contexts?.device?.arch || '',\n device_is_emulator: event.contexts?.device?.simulator || false,\n });\n}\n\n/**\n * Create a profile\n * @param profile\n * @param options\n * @returns\n */\nfunction createProfilePayload(\n cpuProfile: RawThreadCpuProfile,\n {\n release,\n environment,\n event_id,\n transaction,\n start_timestamp,\n trace_id,\n profile_id,\n os_platform,\n os_version,\n os_build,\n device_locale,\n device_model,\n device_manufacturer,\n device_architecture,\n device_is_emulator,\n }: {\n release: string;\n environment: string;\n event_id: string;\n transaction: string;\n start_timestamp: number;\n trace_id: string | undefined;\n profile_id: string;\n os_platform: string;\n os_version: string;\n os_build?: string;\n device_locale: string;\n device_model: string;\n device_manufacturer: string;\n device_architecture: string;\n device_is_emulator: boolean;\n },\n): Profile {\n // Log a warning if the profile has an invalid traceId (should be uuidv4).\n // All profiles and transactions are rejected if this is the case and we want to\n // warn users that this is happening if they enable debug flag\n if (trace_id && trace_id.length !== 32) {\n if (__DEV__) {\n logger.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`);\n }\n }\n\n const profile: Profile = {\n event_id: profile_id,\n timestamp: new Date(start_timestamp).toISOString(),\n platform: 'node',\n version: '1',\n release: release,\n environment: environment,\n runtime: {\n name: 'hermes',\n version: '', // TODO: get hermes version\n },\n os: {\n name: os_platform,\n version: os_version,\n build_number: os_build,\n },\n device: {\n locale: device_locale,\n model: device_model,\n manufacturer: device_manufacturer,\n architecture: device_architecture,\n is_emulator: device_is_emulator,\n },\n profile: cpuProfile,\n transaction: {\n name: transaction,\n id: event_id,\n trace_id: trace_id || '',\n active_thread_id: ACTIVE_THREAD_ID_STRING,\n },\n };\n\n return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: Envelope, profiles: Profile[]): Envelope {\n if (!profiles.length) {\n return envelope;\n }\n\n for (const profile of profiles) {\n // @ts-expect-error untyped envelope\n envelope[1].push([{ type: 'profile' }, profile]);\n }\n return envelope;\n}\n"]}
|
package/dist/js/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAA6C,GAAG,EAAmC,MAAM,cAAc,CAAC;AAQ/G,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAA6C,GAAG,EAAmC,MAAM,cAAc,CAAC;AAQ/G,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AA+BzG;;GAEG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAmF5D;AAED;;GAEG;AAGH,wBAAgB,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,mBAAmB,EACpD,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,yBAAyB,GAClC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED;;;GAGG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAe9C;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CASxF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CASlG"}
|
package/dist/js/sdk.js
CHANGED
|
@@ -20,7 +20,7 @@ import { NATIVE } from './wrapper';
|
|
|
20
20
|
const IGNORED_DEFAULT_INTEGRATIONS = [
|
|
21
21
|
'GlobalHandlers',
|
|
22
22
|
'TryCatch',
|
|
23
|
-
'LinkedErrors',
|
|
23
|
+
'LinkedErrors', // We replace this with `NativeLinkedError`
|
|
24
24
|
];
|
|
25
25
|
const DEFAULT_OPTIONS = {
|
|
26
26
|
enableNativeCrashHandling: true,
|
|
@@ -36,6 +36,7 @@ const DEFAULT_OPTIONS = {
|
|
|
36
36
|
maxQueueSize: DEFAULT_BUFFER_SIZE,
|
|
37
37
|
attachStacktrace: true,
|
|
38
38
|
enableCaptureFailedRequests: false,
|
|
39
|
+
enableNdk: true,
|
|
39
40
|
};
|
|
40
41
|
/**
|
|
41
42
|
* Inits the SDK and returns the final options.
|
|
@@ -76,6 +77,9 @@ export function init(passedOptions) {
|
|
|
76
77
|
if (options.enableNative) {
|
|
77
78
|
defaultIntegrations.push(new DeviceContext());
|
|
78
79
|
}
|
|
80
|
+
if (options._experiments && typeof options._experiments.profilesSampleRate === 'number') {
|
|
81
|
+
defaultIntegrations.push(new HermesProfiling());
|
|
82
|
+
}
|
|
79
83
|
if (hasTracingEnabled(options) && options.enableAutoPerformanceTracing) {
|
|
80
84
|
defaultIntegrations.push(new ReactNativeTracing());
|
|
81
85
|
}
|
|
@@ -88,9 +92,6 @@ export function init(passedOptions) {
|
|
|
88
92
|
if (options.enableCaptureFailedRequests) {
|
|
89
93
|
defaultIntegrations.push(new HttpClient());
|
|
90
94
|
}
|
|
91
|
-
if (options._experiments && typeof options._experiments.profilesSampleRate === 'number') {
|
|
92
|
-
defaultIntegrations.push(new HermesProfiling());
|
|
93
|
-
}
|
|
94
95
|
}
|
|
95
96
|
options.integrations = getIntegrationsToSetup({
|
|
96
97
|
integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),
|
package/dist/js/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Scope } from '@sentry/core';\nimport { getIntegrationsToSetup, hasTracingEnabled, Hub, initAndBind, makeMain, setExtra } from '@sentry/core';\nimport { HttpClient } from '@sentry/integrations';\nimport {\n defaultIntegrations as reactDefaultIntegrations,\n defaultStackParser,\n getCurrentHub,\n makeFetchTransport,\n} from '@sentry/react';\nimport type { Integration, UserFeedback } from '@sentry/types';\nimport { logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport {\n DebugSymbolicator,\n DeviceContext,\n EventOrigin,\n HermesProfiling,\n ModulesLoader,\n ReactNativeErrorHandlers,\n ReactNativeInfo,\n Release,\n SdkInfo,\n} from './integrations';\nimport { NativeLinkedErrors } from './integrations/nativelinkederrors';\nimport { createReactNativeRewriteFrames } from './integrations/rewriteframes';\nimport { Screenshot } from './integrations/screenshot';\nimport { ViewHierarchy } from './integrations/viewhierarchy';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { ReactNativeScope } from './scope';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler, ReactNativeTracing } from './tracing';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { makeUtf8TextEncoder } from './transports/TextEncoder';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { NATIVE } from './wrapper';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n 'LinkedErrors', // We replace this with `NativeLinkedError`\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n transportOptions: {\n textEncoder: makeUtf8TextEncoder(),\n },\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n const reactNativeHub = new Hub(undefined, new ReactNativeScope());\n makeMain(reactNativeHub);\n\n const maxQueueSize = passedOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? passedOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n enableNative,\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' }),\n initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n tracesSampler: safeTracesSampler(passedOptions.tracesSampler),\n };\n\n const defaultIntegrations: Integration[] = passedOptions.defaultIntegrations || [];\n if (passedOptions.defaultIntegrations === undefined) {\n defaultIntegrations.push(new ModulesLoader());\n defaultIntegrations.push(new ReactNativeErrorHandlers({\n patchGlobalPromise: options.patchGlobalPromise,\n }));\n defaultIntegrations.push(new Release());\n defaultIntegrations.push(...[\n ...reactDefaultIntegrations.filter(\n (i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)\n ),\n ]);\n\n defaultIntegrations.push(new NativeLinkedErrors());\n defaultIntegrations.push(new EventOrigin());\n defaultIntegrations.push(new SdkInfo());\n defaultIntegrations.push(new ReactNativeInfo());\n\n if (__DEV__) {\n defaultIntegrations.push(new DebugSymbolicator());\n }\n\n defaultIntegrations.push(createReactNativeRewriteFrames());\n if (options.enableNative) {\n defaultIntegrations.push(new DeviceContext());\n }\n if (hasTracingEnabled(options) && options.enableAutoPerformanceTracing) {\n defaultIntegrations.push(new ReactNativeTracing());\n }\n if (options.attachScreenshot) {\n defaultIntegrations.push(new Screenshot());\n }\n if (options.attachViewHierarchy) {\n defaultIntegrations.push(new ViewHierarchy());\n }\n if (options.enableCaptureFailedRequests) {\n defaultIntegrations.push(new HttpClient());\n }\n if (options._experiments && typeof options._experiments.profilesSampleRate === 'number') {\n defaultIntegrations.push(new HermesProfiling());\n }\n }\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\n// Deprecated in https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f1b25591890978a92c610ce575ea2ba2bbde6a89\n// eslint-disable-next-line deprecation/deprecation\nexport function wrap<P extends JSX.IntrinsicAttributes>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const tracingIntegration = getCurrentHub().getIntegration(ReactNativeTracing);\n if (tracingIntegration) {\n tracingIntegration.useAppStartWithProfiler = true;\n }\n\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * Deprecated. Sets the release on the event.\n * NOTE: Does not set the release on sessions.\n * @deprecated\n */\nexport function setRelease(release: string): void {\n setExtra('__sentry_release', release);\n}\n\n/**\n * Deprecated. Sets the dist on the event.\n * NOTE: Does not set the dist on sessions.\n * @deprecated\n */\nexport function setDist(dist: string): void {\n setExtra('__sentry_dist', dist);\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n if (client) {\n client.nativeCrash();\n }\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n getCurrentHub().getClient<ReactNativeClient>()?.captureUserFeedback(feedback);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback: (scope: Scope) => void): ReturnType<Hub['withScope']> {\n const safeCallback = (scope: Scope): void => {\n try {\n callback(scope);\n } catch (e) {\n logger.error('Error while running withScope callback', e);\n }\n };\n getCurrentHub().withScope(safeCallback);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n const safeCallback = (scope: Scope): void => {\n try {\n callback(scope);\n } catch (e) {\n logger.error('Error while running configureScope callback', e);\n }\n };\n getCurrentHub().configureScope(safeCallback);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,mBAAmB,IAAI,wBAAwB,EAC/C,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAE,iCAAiC,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,eAAe,EACf,OAAO,EACP,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,4BAA4B,GAAG;IACnC,gBAAgB;IAChB,UAAU;IACV,cAAc,EAAE,2CAA2C;CAC5D,CAAC;AACF,MAAM,eAAe,GAAuB;IAC1C,yBAAyB,EAAE,IAAI;IAC/B,kBAAkB,EAAE,IAAI;IACxB,uBAAuB,EAAE,IAAI;IAC7B,4BAA4B,EAAE,IAAI;IAClC,iCAAiC,EAAE,IAAI;IACvC,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE;QAChB,WAAW,EAAE,mBAAmB,EAAE;KACnC;IACD,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,mBAAmB;IACjC,gBAAgB,EAAE,IAAI;IACtB,2BAA2B,EAAE,KAAK;IAClC,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,aAAiC;;IACpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,MAAA,MAAA,aAAa,CAAC,YAAY,mCAE1C,MAAA,aAAa,CAAC,gBAAgB,0CAAE,UAAU,mCAC1C,eAAe,CAAC,YAAY,CAAC;IAElC,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,KAAK,SAAS,IAAI,aAAa,CAAC,YAAY;QACzF,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC5B,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,OAAO,iDACR,eAAe,GACf,aAAa,KAChB,YAAY;QACZ,6DAA6D;QAC7D,SAAS,EAAE,aAAa,CAAC,SAAS;eAC7B,0BAA0B,CAAC;gBAC5B,YAAY;aACb,CAAC;eACC,kBAAkB,EACvB,gBAAgB,gDACX,eAAe,CAAC,gBAAgB,GAChC,CAAC,MAAA,aAAa,CAAC,gBAAgB,mCAAI,EAAE,CAAC,KACzC,UAAU,EAAE,YAAY,KAE1B,YAAY,EACZ,YAAY,EAAE,EAAE,EAChB,WAAW,EAAE,iCAAiC,CAAC,aAAa,CAAC,WAAW,IAAI,kBAAkB,CAAC,EAC/F,gBAAgB,EAAE,WAAW,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,qCAAqC,EAAE,CAAC,EACvH,YAAY,EAAE,WAAW,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,CAAC,EAC3G,aAAa,EAAE,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,GAC9D,CAAC;IAEF,MAAM,mBAAmB,GAAkB,aAAa,CAAC,mBAAmB,IAAI,EAAE,CAAC;IACnF,IAAI,aAAa,CAAC,mBAAmB,KAAK,SAAS,EAAE;QACnD,mBAAmB,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QAC9C,mBAAmB,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC;YACpD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,CAAC,CAAC;QACJ,mBAAmB,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QACxC,mBAAmB,CAAC,IAAI,CAAC,GAAG;YAC1B,GAAG,wBAAwB,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACtD;SACF,CAAC,CAAC;QAEH,mBAAmB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;QACnD,mBAAmB,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC5C,mBAAmB,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QACxC,mBAAmB,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAEhD,IAAI,OAAO,EAAE;YACX,mBAAmB,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;SACnD;QAED,mBAAmB,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,mBAAmB,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,OAAO,CAAC,YAAY,CAAC,kBAAkB,KAAK,QAAQ,EAAE;YACvF,mBAAmB,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;SACjD;QACD,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,4BAA4B,EAAE;YACtE,mBAAmB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;SACpD;QACD,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC5B,mBAAmB,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;SAC5C;QACD,IAAI,OAAO,CAAC,mBAAmB,EAAE;YAC/B,mBAAmB,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,2BAA2B,EAAE;YACvC,mBAAmB,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;SAC5C;KACF;IAED,OAAO,CAAC,YAAY,GAAG,sBAAsB,CAAC;QAC5C,YAAY,EAAE,WAAW,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,CAAC;QAC3G,mBAAmB;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,mHAAmH;AACnH,mDAAmD;AACnD,MAAM,UAAU,IAAI,CAClB,aAAqC,EACrC,OAAmC;;IAEnC,MAAM,kBAAkB,GAAG,aAAa,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC9E,IAAI,kBAAkB,EAAE;QACtB,kBAAkB,CAAC,uBAAuB,GAAG,IAAI,CAAC;KACnD;IAED,MAAM,aAAa,mCACd,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,EAAE,CAAC,KACjC,IAAI,EAAE,MAAA,aAAa,CAAC,WAAW,mCAAI,MAAM,GAC1C,CAAC;IAEF,MAAM,OAAO,GAAgB,CAAC,QAAQ,EAAE,EAAE;;QACxC,OAAO,CACL,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,mCAAI,EAAE,CAAC,CAAC,CAC/D;QAAA,CAAC,mBAAmB,CAAC,IAAI,aAAa,CAAC,CACrC;UAAA,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,EAC9B;QAAA,EAAE,mBAAmB,CACvB;MAAA,EAAE,kBAAkB,CAAC,CACtB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,SAAS,EAAqB,CAAC;IAC9D,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,WAAW,EAAE,CAAC;KACtB;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAgB,KAAK;;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,SAAS,EAAqB,CAAC;YAE9D,IAAI,MAAM,EAAE;gBACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEpC,OAAO,MAAM,CAAC;aACf;YACD,oCAAoC;SACrC;QAAC,OAAO,CAAC,EAAE,GAAG;QAEf,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEjD,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,UAAgB,KAAK;;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,SAAS,EAAqB,CAAC;YAE9D,IAAI,MAAM,EAAE;gBACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;aACtB;SACF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;SACzC;IACH,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAsB;;IACxD,MAAA,aAAa,EAAE,CAAC,SAAS,EAAqB,0CAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgC;IACxD,MAAM,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC1C,IAAI;YACF,QAAQ,CAAC,KAAK,CAAC,CAAC;SACjB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;SAC3D;IACH,CAAC,CAAC;IACF,aAAa,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgC;IAC7D,MAAM,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC1C,IAAI;YACF,QAAQ,CAAC,KAAK,CAAC,CAAC;SACjB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAC;SAChE;IACH,CAAC,CAAC;IACF,aAAa,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import type { Scope } from '@sentry/core';\nimport { getIntegrationsToSetup, hasTracingEnabled, Hub, initAndBind, makeMain, setExtra } from '@sentry/core';\nimport { HttpClient } from '@sentry/integrations';\nimport {\n defaultIntegrations as reactDefaultIntegrations,\n defaultStackParser,\n getCurrentHub,\n makeFetchTransport,\n} from '@sentry/react';\nimport type { Integration, UserFeedback } from '@sentry/types';\nimport { logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport {\n DebugSymbolicator,\n DeviceContext,\n EventOrigin,\n HermesProfiling,\n ModulesLoader,\n ReactNativeErrorHandlers,\n ReactNativeInfo,\n Release,\n SdkInfo,\n} from './integrations';\nimport { NativeLinkedErrors } from './integrations/nativelinkederrors';\nimport { createReactNativeRewriteFrames } from './integrations/rewriteframes';\nimport { Screenshot } from './integrations/screenshot';\nimport { ViewHierarchy } from './integrations/viewhierarchy';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { ReactNativeScope } from './scope';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler, ReactNativeTracing } from './tracing';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { makeUtf8TextEncoder } from './transports/TextEncoder';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { NATIVE } from './wrapper';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n 'LinkedErrors', // We replace this with `NativeLinkedError`\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n transportOptions: {\n textEncoder: makeUtf8TextEncoder(),\n },\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n enableNdk: true,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n const reactNativeHub = new Hub(undefined, new ReactNativeScope());\n makeMain(reactNativeHub);\n\n const maxQueueSize = passedOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? passedOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n enableNative,\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' }),\n initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n tracesSampler: safeTracesSampler(passedOptions.tracesSampler),\n };\n\n const defaultIntegrations: Integration[] = passedOptions.defaultIntegrations || [];\n if (passedOptions.defaultIntegrations === undefined) {\n defaultIntegrations.push(new ModulesLoader());\n defaultIntegrations.push(new ReactNativeErrorHandlers({\n patchGlobalPromise: options.patchGlobalPromise,\n }));\n defaultIntegrations.push(new Release());\n defaultIntegrations.push(...[\n ...reactDefaultIntegrations.filter(\n (i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)\n ),\n ]);\n\n defaultIntegrations.push(new NativeLinkedErrors());\n defaultIntegrations.push(new EventOrigin());\n defaultIntegrations.push(new SdkInfo());\n defaultIntegrations.push(new ReactNativeInfo());\n\n if (__DEV__) {\n defaultIntegrations.push(new DebugSymbolicator());\n }\n\n defaultIntegrations.push(createReactNativeRewriteFrames());\n if (options.enableNative) {\n defaultIntegrations.push(new DeviceContext());\n }\n if (options._experiments && typeof options._experiments.profilesSampleRate === 'number') {\n defaultIntegrations.push(new HermesProfiling());\n }\n if (hasTracingEnabled(options) && options.enableAutoPerformanceTracing) {\n defaultIntegrations.push(new ReactNativeTracing());\n }\n if (options.attachScreenshot) {\n defaultIntegrations.push(new Screenshot());\n }\n if (options.attachViewHierarchy) {\n defaultIntegrations.push(new ViewHierarchy());\n }\n if (options.enableCaptureFailedRequests) {\n defaultIntegrations.push(new HttpClient());\n }\n }\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\n// Deprecated in https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f1b25591890978a92c610ce575ea2ba2bbde6a89\n// eslint-disable-next-line deprecation/deprecation\nexport function wrap<P extends JSX.IntrinsicAttributes>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const tracingIntegration = getCurrentHub().getIntegration(ReactNativeTracing);\n if (tracingIntegration) {\n tracingIntegration.useAppStartWithProfiler = true;\n }\n\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * Deprecated. Sets the release on the event.\n * NOTE: Does not set the release on sessions.\n * @deprecated\n */\nexport function setRelease(release: string): void {\n setExtra('__sentry_release', release);\n}\n\n/**\n * Deprecated. Sets the dist on the event.\n * NOTE: Does not set the dist on sessions.\n * @deprecated\n */\nexport function setDist(dist: string): void {\n setExtra('__sentry_dist', dist);\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n if (client) {\n client.nativeCrash();\n }\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n getCurrentHub().getClient<ReactNativeClient>()?.captureUserFeedback(feedback);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback: (scope: Scope) => void): ReturnType<Hub['withScope']> {\n const safeCallback = (scope: Scope): void => {\n try {\n callback(scope);\n } catch (e) {\n logger.error('Error while running withScope callback', e);\n }\n };\n getCurrentHub().withScope(safeCallback);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n const safeCallback = (scope: Scope): void => {\n try {\n callback(scope);\n } catch (e) {\n logger.error('Error while running configureScope callback', e);\n }\n };\n getCurrentHub().configureScope(safeCallback);\n}\n"]}
|
|
@@ -38,12 +38,12 @@ class ModulesCollector {
|
|
|
38
38
|
}
|
|
39
39
|
seen[dir] = true;
|
|
40
40
|
const pkgPath = join(dir, 'package.json');
|
|
41
|
-
if (!fs_1.existsSync(pkgPath)) {
|
|
41
|
+
if (!(0, fs_1.existsSync)(pkgPath)) {
|
|
42
42
|
// fast-forward if the package.json doesn't exist
|
|
43
43
|
return upDirSearch();
|
|
44
44
|
}
|
|
45
45
|
try {
|
|
46
|
-
const info = JSON.parse(fs_1.readFileSync(pkgPath, 'utf8'));
|
|
46
|
+
const info = JSON.parse((0, fs_1.readFileSync)(pkgPath, 'utf8'));
|
|
47
47
|
candidate = {
|
|
48
48
|
name: info.name,
|
|
49
49
|
version: info.version,
|
|
@@ -77,17 +77,17 @@ class ModulesCollector {
|
|
|
77
77
|
utils_1.logger.info('Reading source map from', sourceMapPath);
|
|
78
78
|
utils_1.logger.info('Saving modules to', outputModulesPath);
|
|
79
79
|
utils_1.logger.info('Resolving modules from paths', outputModulesPath);
|
|
80
|
-
if (!fs_1.existsSync(sourceMapPath)) {
|
|
80
|
+
if (!(0, fs_1.existsSync)(sourceMapPath)) {
|
|
81
81
|
utils_1.logger.error(`Source map file does not exist at ${sourceMapPath}`);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
for (const modulesPath of modulesPaths) {
|
|
85
|
-
if (!fs_1.existsSync(modulesPath)) {
|
|
85
|
+
if (!(0, fs_1.existsSync)(modulesPath)) {
|
|
86
86
|
utils_1.logger.error(`Modules path does not exist at ${modulesPath}`);
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
const map = JSON.parse(fs_1.readFileSync(sourceMapPath, 'utf8'));
|
|
90
|
+
const map = JSON.parse((0, fs_1.readFileSync)(sourceMapPath, 'utf8'));
|
|
91
91
|
if (!map.sources || !Array.isArray(map.sources)) {
|
|
92
92
|
utils_1.logger.error(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);
|
|
93
93
|
return;
|
|
@@ -95,10 +95,10 @@ class ModulesCollector {
|
|
|
95
95
|
const sources = map.sources;
|
|
96
96
|
const modules = collect ? collect(sources, modulesPaths) : ModulesCollector.collect(sources, modulesPaths);
|
|
97
97
|
const outputModulesDirPath = dirname(outputModulesPath);
|
|
98
|
-
if (!fs_1.existsSync(outputModulesDirPath)) {
|
|
99
|
-
fs_1.mkdirSync(outputModulesDirPath, { recursive: true });
|
|
98
|
+
if (!(0, fs_1.existsSync)(outputModulesDirPath)) {
|
|
99
|
+
(0, fs_1.mkdirSync)(outputModulesDirPath, { recursive: true });
|
|
100
100
|
}
|
|
101
|
-
fs_1.writeFileSync(outputModulesPath, JSON.stringify(modules, null, 2));
|
|
101
|
+
(0, fs_1.writeFileSync)(outputModulesPath, JSON.stringify(modules, null, 2));
|
|
102
102
|
utils_1.logger.info(`Modules collected and saved to: ${outputModulesPath}`);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModulesCollector.js","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":";AAAA,yCAAuC;AACvC,2BAAwE;AACxE,+BAAkC;AAElC,cAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,6DAA6D;AAC7D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAK,CAAC;AAOxD;;GAEG;AACH,MAAqB,gBAAgB;IACnC,qBAAqB;IACd,MAAM,CAAC,OAAO,CAAC,OAAkB,EAAE,YAAsB;QAC9D,MAAM,sBAAsB,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE/G,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,MAAM,IAAI,GAAyB,EAAE,CAAC;QAEtC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAa,EAAE,EAAE;YAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO;aACR;YAED,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,4BAA4B;YAC5C,IAAI,SAAS,GAAmB,IAAI,CAAC;YAErC,0EAA0E;YAC1E,MAAM,WAAW,GAAG,GAAS,EAAE;gBAC7B,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;gBAEzB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;oBACjD,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,MAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAA,EAAE;wBACzC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;qBAC3C;yBAAM,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE;wBAC1B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;qBACnC;oBACD,OAAO;iBACR;gBAED,IAAI,CAAC,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;oBAC1C,OAAO;iBACR;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;gBAC1C,IAAI,CAAC,eAAU,
|
|
1
|
+
{"version":3,"file":"ModulesCollector.js","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@sentry/utils';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { posix, sep } from 'path';\n\nlogger.enable();\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { dirname, join, resolve, sep: posixSep } = posix;\n\ninterface Package {\n name?: string;\n version?: string;\n}\n\n/**\n * Collects JS modules from source paths.\n */\nexport default class ModulesCollector {\n /** Collect method */\n public static collect(sources: unknown[], modulesPaths: string[]): Record<string, string> {\n const normalizedModulesPaths = modulesPaths.map(modulesPath => resolve(modulesPath.split(sep).join(posixSep)));\n\n const infos: Record<string, string> = {};\n const seen: Record<string, true> = {};\n\n sources.forEach((path: unknown) => {\n if (typeof path !== 'string') {\n return;\n }\n\n let dir = path; // included source file path\n let candidate: Package | null = null;\n\n /** Traverse directories upward in the search of all package.json files */\n const upDirSearch = (): void => {\n const parentDir = dir;\n dir = dirname(parentDir);\n\n if (normalizedModulesPaths.includes(resolve(dir))) {\n if (candidate?.name && candidate?.version) {\n infos[candidate.name] = candidate.version;\n } else if (candidate?.name) {\n infos[candidate.name] = 'unknown';\n }\n return;\n }\n\n if (!dir || parentDir === dir || seen[dir]) {\n return;\n }\n seen[dir] = true;\n\n const pkgPath = join(dir, 'package.json');\n if (!existsSync(pkgPath)) {\n // fast-forward if the package.json doesn't exist\n return upDirSearch();\n }\n\n try {\n const info: Package = JSON.parse(readFileSync(pkgPath, 'utf8'));\n candidate = {\n name: info.name,\n version: info.version,\n };\n } catch (error) {\n logger.error(`Failed to read ${pkgPath}`);\n }\n\n return upDirSearch(); // processed package.json file, continue up search\n };\n\n upDirSearch();\n });\n\n return infos;\n }\n\n /**\n * Runs collection of modules.\n */\n public static run({\n sourceMapPath,\n outputModulesPath,\n modulesPaths,\n collect,\n }: Partial<{\n sourceMapPath: string;\n outputModulesPath: string;\n modulesPaths: string[];\n collect: (sources: unknown[], modulesPaths: string[]) => Record<string, string>;\n }>): void {\n if (!sourceMapPath) {\n logger.error('First argument `source-map-path` is missing!');\n return;\n }\n if (!outputModulesPath) {\n logger.error('Second argument `modules-output-path` is missing!');\n return;\n }\n if (!modulesPaths || modulesPaths.length === 0) {\n logger.error('Third argument `modules-paths` is missing!');\n return;\n }\n\n logger.info('Reading source map from', sourceMapPath);\n logger.info('Saving modules to', outputModulesPath);\n logger.info('Resolving modules from paths', outputModulesPath);\n\n if (!existsSync(sourceMapPath)) {\n logger.error(`Source map file does not exist at ${sourceMapPath}`);\n return;\n }\n for (const modulesPath of modulesPaths) {\n if (!existsSync(modulesPath)) {\n logger.error(`Modules path does not exist at ${modulesPath}`);\n return;\n }\n }\n\n const map: { sources?: unknown } = JSON.parse(readFileSync(sourceMapPath, 'utf8'));\n if (!map.sources || !Array.isArray(map.sources)) {\n logger.error(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);\n return;\n }\n\n const sources: unknown[] = map.sources;\n const modules = collect ? collect(sources, modulesPaths) : ModulesCollector.collect(sources, modulesPaths);\n\n const outputModulesDirPath = dirname(outputModulesPath);\n if (!existsSync(outputModulesDirPath)) {\n mkdirSync(outputModulesDirPath, { recursive: true });\n }\n writeFileSync(outputModulesPath, JSON.stringify(modules, null, 2));\n logger.info(`Modules collected and saved to: ${outputModulesPath}`);\n }\n}\n"]}
|
package/dist/js/touchevents.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export
|
|
2
|
+
export type TouchEventBoundaryProps = {
|
|
3
3
|
/**
|
|
4
4
|
* The category assigned to the breadcrumb that is logged by the touch event.
|
|
5
5
|
*/
|
|
@@ -66,6 +66,6 @@ declare class TouchEventBoundary extends React.Component<TouchEventBoundaryProps
|
|
|
66
66
|
* @param WrappedComponent any React Component
|
|
67
67
|
* @param boundaryProps TouchEventBoundaryProps
|
|
68
68
|
*/
|
|
69
|
-
declare const withTouchEventBoundary: (InnerComponent: React.ComponentType<any>, boundaryProps?: TouchEventBoundaryProps
|
|
69
|
+
declare const withTouchEventBoundary: (InnerComponent: React.ComponentType<any>, boundaryProps?: TouchEventBoundaryProps) => React.FunctionComponent;
|
|
70
70
|
export { TouchEventBoundary, withTouchEventBoundary };
|
|
71
71
|
//# sourceMappingURL=touchevents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,
|
|
1
|
+
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2BF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IAEvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD,OAAO,CAAC,mBAAmB,CAAmC;IAE9D;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAQhC;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IAYhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IAEH,OAAO,CAAC,aAAa;CAgFtB;AAED;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,mBAEV,MAAM,aAAa,CAAC,GAAG,CAAC,kBACxB,uBAAuB,KACtC,MAAM,iBAUR,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchevents.js","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"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","sourcesContent":["import { addBreadcrumb, getCurrentHub } from '@sentry/core';\nimport type { SeverityLevel } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport * as React from 'react';\nimport type { GestureResponderEvent} from 'react-native';\nimport { StyleSheet, View } from 'react-native';\n\nimport { createIntegration } from './integrations/factory';\nimport { ReactNativeTracing } from './tracing';\nimport { UI_ACTION_TOUCH } from './tracing/ops';\n\nexport type TouchEventBoundaryProps = {\n /**\n * The category assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbCategory?: string;\n /**\n * The type assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbType?: string;\n /**\n * The max number of components to display when logging a touch's component tree.\n */\n maxComponentTreeSize?: number;\n /**\n * Component name(s) to ignore when logging the touch event. This prevents unhelpful logs such as\n * \"Touch event within element: View\" where you still can't tell which View it occurred in.\n */\n ignoreNames?: Array<string | RegExp>;\n /**\n * Deprecated, use ignoreNames instead\n * @deprecated\n */\n ignoredDisplayNames?: Array<string | RegExp>;\n /**\n * React Node wrapped by TouchEventBoundary.\n */\n children?: React.ReactNode;\n /**\n * Label Name used to identify the touched element.\n */\n labelName?: string;\n};\n\nconst touchEventStyles = StyleSheet.create({\n wrapperView: {\n flex: 1,\n },\n});\n\nconst DEFAULT_BREADCRUMB_CATEGORY = 'touch';\nconst DEFAULT_BREADCRUMB_TYPE = 'user';\nconst DEFAULT_MAX_COMPONENT_TREE_SIZE = 20;\n\nconst SENTRY_LABEL_PROP_KEY = 'sentry-label';\n\ninterface ElementInstance {\n elementType?: {\n displayName?: string;\n name?: string;\n };\n memoizedProps?: Record<string, unknown>;\n return?: ElementInstance;\n}\n\ninterface PrivateGestureResponderEvent extends GestureResponderEvent {\n _targetInst?: ElementInstance;\n}\n\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\n\n public static displayName: string = '__Sentry.TouchEventBoundary';\n public static defaultProps: Partial<TouchEventBoundaryProps> = {\n breadcrumbCategory: DEFAULT_BREADCRUMB_CATEGORY,\n breadcrumbType: DEFAULT_BREADCRUMB_TYPE,\n ignoreNames: [],\n maxComponentTreeSize: DEFAULT_MAX_COMPONENT_TREE_SIZE,\n };\n\n public readonly name: string = 'TouchEventBoundary';\n\n private _tracingIntegration: ReactNativeTracing | null = null;\n\n /**\n * Registers the TouchEventBoundary as a Sentry Integration.\n */\n public componentDidMount(): void {\n const client = getCurrentHub().getClient();\n client?.addIntegration?.(createIntegration(this.name));\n if (!this._tracingIntegration && client) {\n this._tracingIntegration = client.getIntegration(ReactNativeTracing);\n }\n }\n\n /**\n *\n */\n public render(): React.ReactNode {\n return (\n <View\n style={touchEventStyles.wrapperView}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onTouchStart={this._onTouchStart.bind(this) as any}\n >\n {this.props.children}\n </View>\n );\n }\n\n /**\n * Logs the touch event given the component tree names and a label.\n */\n private _logTouchEvent(\n componentTreeNames: string[],\n activeLabel?: string\n ): void {\n const level = 'info' as SeverityLevel;\n const crumb = {\n category: this.props.breadcrumbCategory,\n data: { componentTree: componentTreeNames },\n level: level,\n message: activeLabel\n ? `Touch event within element: ${activeLabel}`\n : 'Touch event within component tree',\n type: this.props.breadcrumbType,\n };\n addBreadcrumb(crumb);\n\n logger.log(`[TouchEvents] ${crumb.message}`);\n }\n\n /**\n * Checks if the name is supposed to be ignored.\n */\n private _isNameIgnored(name: string): boolean {\n let ignoreNames = this.props.ignoreNames || [];\n // eslint-disable-next-line deprecation/deprecation\n if (this.props.ignoredDisplayNames) {\n // This is to make it compatible with prior version.\n // eslint-disable-next-line deprecation/deprecation\n ignoreNames = [...ignoreNames, ...this.props.ignoredDisplayNames];\n }\n\n return ignoreNames.some(\n (ignoreName: string | RegExp) =>\n (typeof ignoreName === 'string' && name === ignoreName) ||\n (ignoreName instanceof RegExp && name.match(ignoreName))\n );\n }\n\n // Originally was going to clean the names of any HOCs as well but decided that it might hinder debugging effectively. Will leave here in case\n // private readonly _cleanName = (name: string): string =>\n // name.replace(/.*\\(/g, \"\").replace(/\\)/g, \"\");\n\n /**\n * Traverses through the component tree when a touch happens and logs it.\n * @param e\n */\n // eslint-disable-next-line complexity\n private _onTouchStart(e: PrivateGestureResponderEvent): void {\n if (!e._targetInst) {\n return;\n }\n\n let currentInst: ElementInstance | undefined = e._targetInst;\n\n let activeLabel: string | undefined;\n let activeDisplayName: string | undefined;\n const componentTreeNames: string[] = [];\n\n while (\n currentInst &&\n // maxComponentTreeSize will always be defined as we have a defaultProps. But ts needs a check so this is here.\n this.props.maxComponentTreeSize &&\n componentTreeNames.length < this.props.maxComponentTreeSize\n ) {\n if (\n // If the loop gets to the boundary itself, break.\n currentInst.elementType?.displayName ===\n TouchEventBoundary.displayName\n ) {\n break;\n }\n\n const props = currentInst.memoizedProps;\n const sentryLabel =\n typeof props?.[SENTRY_LABEL_PROP_KEY] !== 'undefined'\n ? `${props[SENTRY_LABEL_PROP_KEY]}`\n : undefined;\n\n // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in\n // the \"check-label\" if sentence, so we have to assign it to a variable here first\n let labelValue;\n if (typeof this.props.labelName === 'string')\n labelValue = props?.[this.props.labelName];\n\n // Check the label first\n if (sentryLabel && !this._isNameIgnored(sentryLabel)) {\n if (!activeLabel) {\n activeLabel = sentryLabel;\n }\n componentTreeNames.push(sentryLabel);\n } else if (\n typeof labelValue === 'string' &&\n !this._isNameIgnored(labelValue)\n ) {\n if (!activeLabel) {\n activeLabel = labelValue;\n }\n componentTreeNames.push(labelValue);\n } else if (currentInst.elementType) {\n const { elementType } = currentInst;\n\n if (\n elementType.displayName &&\n !this._isNameIgnored(elementType.displayName)\n ) {\n // Check display name\n if (!activeDisplayName) {\n activeDisplayName = elementType.displayName;\n }\n componentTreeNames.push(elementType.displayName);\n }\n }\n\n currentInst = currentInst.return;\n }\n\n const finalLabel = activeLabel ?? activeDisplayName;\n\n if (componentTreeNames.length > 0 || finalLabel) {\n this._logTouchEvent(componentTreeNames, finalLabel);\n }\n\n this._tracingIntegration?.startUserInteractionTransaction({\n elementId: activeLabel,\n op: UI_ACTION_TOUCH,\n });\n }\n}\n\n/**\n * Convenience Higher-Order-Component for TouchEventBoundary\n * @param WrappedComponent any React Component\n * @param boundaryProps TouchEventBoundaryProps\n */\nconst withTouchEventBoundary = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InnerComponent: React.ComponentType<any>,\n boundaryProps?: TouchEventBoundaryProps\n): React.FunctionComponent => {\n const WrappedComponent: React.FunctionComponent = (props) => (\n <TouchEventBoundary {...(boundaryProps ?? {})}>\n <InnerComponent {...props} />\n </TouchEventBoundary>\n );\n\n WrappedComponent.displayName = 'WithTouchEventBoundary';\n\n return WrappedComponent;\n};\n\nexport { TouchEventBoundary, withTouchEventBoundary };\n"]}
|
|
1
|
+
{"version":3,"file":"touchevents.js","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"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","sourcesContent":["import { addBreadcrumb, getCurrentHub } from '@sentry/core';\nimport type { SeverityLevel } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport * as React from 'react';\nimport type { GestureResponderEvent} from 'react-native';\nimport { StyleSheet, View } from 'react-native';\n\nimport { createIntegration } from './integrations/factory';\nimport { ReactNativeTracing } from './tracing';\nimport { UI_ACTION_TOUCH } from './tracing/ops';\n\nexport type TouchEventBoundaryProps = {\n /**\n * The category assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbCategory?: string;\n /**\n * The type assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbType?: string;\n /**\n * The max number of components to display when logging a touch's component tree.\n */\n maxComponentTreeSize?: number;\n /**\n * Component name(s) to ignore when logging the touch event. This prevents unhelpful logs such as\n * \"Touch event within element: View\" where you still can't tell which View it occurred in.\n */\n ignoreNames?: Array<string | RegExp>;\n /**\n * Deprecated, use ignoreNames instead\n * @deprecated\n */\n ignoredDisplayNames?: Array<string | RegExp>;\n /**\n * React Node wrapped by TouchEventBoundary.\n */\n children?: React.ReactNode;\n /**\n * Label Name used to identify the touched element.\n */\n labelName?: string;\n};\n\nconst touchEventStyles = StyleSheet.create({\n wrapperView: {\n flex: 1,\n },\n});\n\nconst DEFAULT_BREADCRUMB_CATEGORY = 'touch';\nconst DEFAULT_BREADCRUMB_TYPE = 'user';\nconst DEFAULT_MAX_COMPONENT_TREE_SIZE = 20;\n\nconst SENTRY_LABEL_PROP_KEY = 'sentry-label';\n\ninterface ElementInstance {\n elementType?: {\n displayName?: string;\n name?: string;\n };\n memoizedProps?: Record<string, unknown>;\n return?: ElementInstance;\n}\n\ninterface PrivateGestureResponderEvent extends GestureResponderEvent {\n _targetInst?: ElementInstance;\n}\n\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\n\n public static displayName: string = '__Sentry.TouchEventBoundary';\n public static defaultProps: Partial<TouchEventBoundaryProps> = {\n breadcrumbCategory: DEFAULT_BREADCRUMB_CATEGORY,\n breadcrumbType: DEFAULT_BREADCRUMB_TYPE,\n ignoreNames: [],\n maxComponentTreeSize: DEFAULT_MAX_COMPONENT_TREE_SIZE,\n };\n\n public readonly name: string = 'TouchEventBoundary';\n\n private _tracingIntegration: ReactNativeTracing | null = null;\n\n /**\n * Registers the TouchEventBoundary as a Sentry Integration.\n */\n public componentDidMount(): void {\n const client = getCurrentHub().getClient();\n client?.addIntegration?.(createIntegration(this.name));\n if (!this._tracingIntegration && client) {\n this._tracingIntegration = client.getIntegration(ReactNativeTracing);\n }\n }\n\n /**\n *\n */\n public render(): React.ReactNode {\n return (\n <View\n style={touchEventStyles.wrapperView}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onTouchStart={this._onTouchStart.bind(this) as any}\n >\n {this.props.children}\n </View>\n );\n }\n\n /**\n * Logs the touch event given the component tree names and a label.\n */\n private _logTouchEvent(\n componentTreeNames: string[],\n activeLabel?: string\n ): void {\n const level = 'info' as SeverityLevel;\n const crumb = {\n category: this.props.breadcrumbCategory,\n data: { componentTree: componentTreeNames },\n level: level,\n message: activeLabel\n ? `Touch event within element: ${activeLabel}`\n : 'Touch event within component tree',\n type: this.props.breadcrumbType,\n };\n addBreadcrumb(crumb);\n\n logger.log(`[TouchEvents] ${crumb.message}`);\n }\n\n /**\n * Checks if the name is supposed to be ignored.\n */\n private _isNameIgnored(name: string): boolean {\n let ignoreNames = this.props.ignoreNames || [];\n // eslint-disable-next-line deprecation/deprecation\n if (this.props.ignoredDisplayNames) {\n // This is to make it compatible with prior version.\n // eslint-disable-next-line deprecation/deprecation\n ignoreNames = [...ignoreNames, ...this.props.ignoredDisplayNames];\n }\n\n return ignoreNames.some(\n (ignoreName: string | RegExp) =>\n (typeof ignoreName === 'string' && name === ignoreName) ||\n (ignoreName instanceof RegExp && name.match(ignoreName))\n );\n }\n\n // Originally was going to clean the names of any HOCs as well but decided that it might hinder debugging effectively. Will leave here in case\n // private readonly _cleanName = (name: string): string =>\n // name.replace(/.*\\(/g, \"\").replace(/\\)/g, \"\");\n\n /**\n * Traverses through the component tree when a touch happens and logs it.\n * @param e\n */\n // eslint-disable-next-line complexity\n private _onTouchStart(e: PrivateGestureResponderEvent): void {\n if (!e._targetInst) {\n return;\n }\n\n let currentInst: ElementInstance | undefined = e._targetInst;\n\n let activeLabel: string | undefined;\n let activeDisplayName: string | undefined;\n const componentTreeNames: string[] = [];\n\n while (\n currentInst &&\n // maxComponentTreeSize will always be defined as we have a defaultProps. But ts needs a check so this is here.\n this.props.maxComponentTreeSize &&\n componentTreeNames.length < this.props.maxComponentTreeSize\n ) {\n if (\n // If the loop gets to the boundary itself, break.\n currentInst.elementType?.displayName ===\n TouchEventBoundary.displayName\n ) {\n break;\n }\n\n const props = currentInst.memoizedProps;\n const sentryLabel =\n typeof props?.[SENTRY_LABEL_PROP_KEY] !== 'undefined'\n ? `${props[SENTRY_LABEL_PROP_KEY]}`\n : undefined;\n\n // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in\n // the \"check-label\" if sentence, so we have to assign it to a variable here first\n let labelValue;\n if (typeof this.props.labelName === 'string')\n labelValue = props?.[this.props.labelName];\n\n // Check the label first\n if (sentryLabel && !this._isNameIgnored(sentryLabel)) {\n if (!activeLabel) {\n activeLabel = sentryLabel;\n }\n componentTreeNames.push(sentryLabel);\n } else if (\n typeof labelValue === 'string' &&\n !this._isNameIgnored(labelValue)\n ) {\n if (!activeLabel) {\n activeLabel = labelValue;\n }\n componentTreeNames.push(labelValue);\n } else if (currentInst.elementType) {\n const { elementType } = currentInst;\n\n if (\n elementType.displayName &&\n !this._isNameIgnored(elementType.displayName)\n ) {\n // Check display name\n if (!activeDisplayName) {\n activeDisplayName = elementType.displayName;\n }\n componentTreeNames.push(elementType.displayName);\n }\n }\n\n currentInst = currentInst.return;\n }\n\n const finalLabel = activeLabel ?? activeDisplayName;\n\n if (componentTreeNames.length > 0 || finalLabel) {\n this._logTouchEvent(componentTreeNames, finalLabel);\n }\n\n this._tracingIntegration?.startUserInteractionTransaction({\n elementId: activeLabel,\n op: UI_ACTION_TOUCH,\n });\n }\n}\n\n/**\n * Convenience Higher-Order-Component for TouchEventBoundary\n * @param WrappedComponent any React Component\n * @param boundaryProps TouchEventBoundaryProps\n */\nconst withTouchEventBoundary = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InnerComponent: React.ComponentType<any>,\n boundaryProps?: TouchEventBoundaryProps\n): React.FunctionComponent => {\n const WrappedComponent: React.FunctionComponent = (props) => (\n <TouchEventBoundary {...(boundaryProps ?? {})}>\n <InnerComponent {...props} />\n </TouchEventBoundary>\n );\n\n WrappedComponent.displayName = 'WithTouchEventBoundary';\n\n return WrappedComponent;\n};\n\nexport { TouchEventBoundary, withTouchEventBoundary };\n"]}
|