@sentry/react-native 5.0.0-alpha.9 → 5.0.0-beta.2
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 +153 -3
- package/README.md +1 -1
- package/RNSentry.podspec +5 -5
- package/android/build.gradle +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +133 -21
- package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +10 -0
- package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +10 -0
- package/dist/js/NativeRNSentry.d.ts +37 -3
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/NativeRNSentry.js.map +1 -1
- package/dist/js/breadcrumb.d.ts +11 -0
- package/dist/js/breadcrumb.d.ts.map +1 -0
- package/dist/js/breadcrumb.js +34 -0
- package/dist/js/breadcrumb.js.map +1 -0
- package/dist/js/client.d.ts +8 -5
- package/dist/js/client.d.ts.map +1 -1
- package/dist/js/client.js +36 -35
- package/dist/js/client.js.map +1 -1
- package/dist/js/index.d.ts +1 -0
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +1 -0
- package/dist/js/index.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.map +1 -1
- package/dist/js/integrations/devicecontext.d.ts +2 -2
- package/dist/js/integrations/devicecontext.d.ts.map +1 -1
- package/dist/js/integrations/devicecontext.js +45 -11
- package/dist/js/integrations/devicecontext.js.map +1 -1
- package/dist/js/integrations/eventorigin.d.ts +1 -1
- package/dist/js/integrations/eventorigin.d.ts.map +1 -1
- package/dist/js/integrations/eventorigin.js.map +1 -1
- package/dist/js/integrations/factory.d.ts +7 -0
- package/dist/js/integrations/factory.d.ts.map +1 -0
- package/dist/js/integrations/factory.js +11 -0
- package/dist/js/integrations/factory.js.map +1 -0
- package/dist/js/integrations/modulesloader.d.ts +1 -1
- package/dist/js/integrations/modulesloader.d.ts.map +1 -1
- package/dist/js/integrations/modulesloader.js +8 -2
- package/dist/js/integrations/modulesloader.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js +4 -3
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/integrations/reactnativeinfo.d.ts +1 -1
- package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeinfo.js.map +1 -1
- package/dist/js/integrations/release.d.ts +1 -1
- package/dist/js/integrations/release.d.ts.map +1 -1
- package/dist/js/integrations/release.js.map +1 -1
- package/dist/js/integrations/screenshot.d.ts +23 -0
- package/dist/js/integrations/screenshot.d.ts.map +1 -0
- package/dist/js/integrations/screenshot.js +39 -0
- package/dist/js/integrations/screenshot.js.map +1 -0
- package/dist/js/integrations/sdkinfo.d.ts +1 -1
- package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
- package/dist/js/integrations/sdkinfo.js.map +1 -1
- package/dist/js/integrations/viewhierarchy.d.ts +20 -0
- package/dist/js/integrations/viewhierarchy.d.ts.map +1 -0
- package/dist/js/integrations/viewhierarchy.js +50 -0
- package/dist/js/integrations/viewhierarchy.js.map +1 -0
- package/dist/js/measurements.d.ts +4 -0
- package/dist/js/measurements.d.ts.map +1 -1
- package/dist/js/measurements.js +11 -0
- package/dist/js/measurements.js.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 +24 -11
- package/dist/js/options.d.ts.map +1 -1
- package/dist/js/options.js.map +1 -1
- package/dist/js/scope.d.ts +1 -1
- package/dist/js/scope.d.ts.map +1 -1
- package/dist/js/scope.js +4 -2
- package/dist/js/scope.js.map +1 -1
- package/dist/js/sdk.d.ts +4 -3
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +15 -6
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/ModulesCollector.d.ts +10 -1
- package/dist/js/tools/ModulesCollector.d.ts.map +1 -1
- package/dist/js/tools/ModulesCollector.js +51 -1
- package/dist/js/tools/ModulesCollector.js.map +1 -1
- package/dist/js/tools/collectModules.js +6 -27
- package/dist/js/tools/collectModules.js.map +1 -1
- package/dist/js/touchevents.d.ts +9 -0
- package/dist/js/touchevents.d.ts.map +1 -1
- package/dist/js/touchevents.js +23 -6
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/nativeframes.d.ts +2 -2
- package/dist/js/tracing/nativeframes.d.ts.map +1 -1
- package/dist/js/tracing/nativeframes.js.map +1 -1
- package/dist/js/tracing/reactnativenavigation.d.ts +5 -3
- package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnativenavigation.js +2 -1
- package/dist/js/tracing/reactnativenavigation.js.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.d.ts +1 -0
- package/dist/js/tracing/reactnativeprofiler.d.ts.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.js +7 -0
- package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
- package/dist/js/tracing/reactnativetracing.d.ts +5 -5
- package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
- package/dist/js/tracing/reactnativetracing.js +1 -1
- package/dist/js/tracing/reactnativetracing.js.map +1 -1
- package/dist/js/tracing/reactnavigation.d.ts +4 -2
- package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnavigation.js +2 -1
- package/dist/js/tracing/reactnavigation.js.map +1 -1
- package/dist/js/tracing/reactnavigationv4.d.ts +5 -3
- package/dist/js/tracing/reactnavigationv4.d.ts.map +1 -1
- package/dist/js/tracing/reactnavigationv4.js +2 -1
- package/dist/js/tracing/reactnavigationv4.js.map +1 -1
- package/dist/js/tracing/routingInstrumentation.d.ts +8 -3
- package/dist/js/tracing/routingInstrumentation.d.ts.map +1 -1
- package/dist/js/tracing/routingInstrumentation.js +3 -0
- package/dist/js/tracing/routingInstrumentation.js.map +1 -1
- package/dist/js/tracing/stalltracking.d.ts +2 -2
- package/dist/js/tracing/stalltracking.d.ts.map +1 -1
- package/dist/js/tracing/stalltracking.js.map +1 -1
- package/dist/js/tracing/types.d.ts +1 -1
- package/dist/js/tracing/types.d.ts.map +1 -1
- package/dist/js/tracing/types.js.map +1 -1
- package/dist/js/tracing/utils.d.ts +2 -2
- package/dist/js/tracing/utils.d.ts.map +1 -1
- package/dist/js/tracing/utils.js.map +1 -1
- package/dist/js/transports/TextEncoder.d.ts +1 -1
- package/dist/js/transports/TextEncoder.d.ts.map +1 -1
- package/dist/js/transports/TextEncoder.js.map +1 -1
- package/dist/js/transports/native.d.ts +7 -3
- package/dist/js/transports/native.d.ts.map +1 -1
- package/dist/js/transports/native.js +10 -1
- package/dist/js/transports/native.js.map +1 -1
- package/dist/js/user.d.ts +1 -1
- package/dist/js/user.d.ts.map +1 -1
- package/dist/js/user.js.map +1 -1
- package/dist/js/utils/envelope.d.ts +1 -1
- package/dist/js/utils/envelope.d.ts.map +1 -1
- package/dist/js/utils/envelope.js.map +1 -1
- package/dist/js/utils/ignorerequirecyclelogs.d.ts +6 -0
- package/dist/js/utils/ignorerequirecyclelogs.d.ts.map +1 -0
- package/dist/js/utils/ignorerequirecyclelogs.js +15 -0
- package/dist/js/utils/ignorerequirecyclelogs.js.map +1 -0
- package/dist/js/utils/outcome.d.ts +1 -1
- package/dist/js/utils/outcome.d.ts.map +1 -1
- package/dist/js/utils/outcome.js.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/utils/safe.js.map +1 -1
- package/dist/js/utils/worldwide.d.ts +1 -1
- package/dist/js/utils/worldwide.d.ts.map +1 -1
- package/dist/js/utils/worldwide.js.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.d.ts +10 -3
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +42 -6
- package/dist/js/wrapper.js.map +1 -1
- package/ios/RNSentry.h +5 -0
- package/ios/RNSentry.mm +94 -49
- package/package.json +24 -23
- package/sample-new-architecture/react-native.config.js +3 -1
- package/scripts/collect-modules.sh +12 -1
- package/sentry.gradle +46 -15
- package/src/js/NativeRNSentry.ts +39 -3
- package/ios/RNSentry.xcodeproj/project.pbxproj +0 -472
- package/ios/RNSentry.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNSentry.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
package/dist/js/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAiB;QAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAA+B;QAC5C,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,SAAS,CAAC,MAA8B;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gHAAgH;IACzG,QAAQ,CAAC,GAAW,EAAE,KAAU;QACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB,EAAE,cAAuB;QAClE,MAAM,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAiB;QAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAA+B;QAC5C,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,SAAS,CAAC,MAA8B;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gHAAgH;IACzG,QAAQ,CAAC,GAAW,EAAE,KAAU;QACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB,EAAE,cAAuB;QAClE,MAAM,gBAAgB,mCACjB,UAAU,KACb,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,wBAAwB,GACpD,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,UAAU,CAAC,GAAW,EAAE,OAAsC;QACnE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB;QACzC,OAAO,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;MAEE;IACK,gBAAgB;QACrB,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;CACF","sourcesContent":["import { Scope } from '@sentry/core';\nimport type { Attachment, Breadcrumb, User } from '@sentry/types';\n\nimport { DEFAULT_BREADCRUMB_LEVEL } from './breadcrumb';\nimport { NATIVE } from './wrapper';\n\n/**\n * Extends the scope methods to set scope on the Native SDKs\n */\nexport class ReactNativeScope extends Scope {\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n NATIVE.setUser(user);\n return super.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: string): this {\n NATIVE.setTag(key, value);\n return super.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: string }): this {\n // As native only has setTag, we just loop through each tag key.\n Object.keys(tags).forEach((key) => {\n NATIVE.setTag(key, tags[key]);\n });\n return super.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setExtras(extras: { [key: string]: any }): this {\n Object.keys(extras).forEach((key) => {\n NATIVE.setExtra(key, extras[key]);\n });\n return super.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,@typescript-eslint/no-explicit-any\n public setExtra(key: string, extra: any): this {\n NATIVE.setExtra(key, extra);\n return super.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const mergedBreadcrumb = {\n ...breadcrumb,\n level: breadcrumb.level || DEFAULT_BREADCRUMB_LEVEL,\n };\n NATIVE.addBreadcrumb(mergedBreadcrumb);\n return super.addBreadcrumb(mergedBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n NATIVE.clearBreadcrumbs();\n return super.clearBreadcrumbs();\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(key: string, context: { [key: string]: any } | null): this {\n NATIVE.setContext(key, context);\n return super.setContext(key, context);\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n return super.addAttachment(attachment);\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n return super.clearAttachments();\n }\n}\n"]}
|
package/dist/js/sdk.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Scope } from '@sentry/core';
|
|
2
|
+
import { Hub } from '@sentry/core';
|
|
3
|
+
import type { UserFeedback } from '@sentry/types';
|
|
3
4
|
import * as React from 'react';
|
|
4
|
-
import { ReactNativeOptions, ReactNativeWrapperOptions } from './options';
|
|
5
|
+
import type { ReactNativeOptions, ReactNativeWrapperOptions } from './options';
|
|
5
6
|
/**
|
|
6
7
|
* Inits the SDK and returns the final options.
|
|
7
8
|
*/
|
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,
|
|
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,EAA0B,GAAG,EAAmC,MAAM,cAAc,CAAC;AAQ5F,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,KAAK,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AA4BzG;;GAEG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAgG5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,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
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { getIntegrationsToSetup, Hub, initAndBind, makeMain, setExtra } from '@sentry/core';
|
|
3
3
|
import { RewriteFrames } from '@sentry/integrations';
|
|
4
|
-
import { defaultIntegrations as reactDefaultIntegrations, defaultStackParser, getCurrentHub, } from '@sentry/react';
|
|
4
|
+
import { defaultIntegrations as reactDefaultIntegrations, defaultStackParser, getCurrentHub, makeFetchTransport, } from '@sentry/react';
|
|
5
5
|
import { logger, stackParserFromStackParserOptions } from '@sentry/utils';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { ReactNativeClient } from './client';
|
|
8
8
|
import { DebugSymbolicator, DeviceContext, EventOrigin, ModulesLoader, ReactNativeErrorHandlers, ReactNativeInfo, Release, SdkInfo, } from './integrations';
|
|
9
|
+
import { Screenshot } from './integrations/screenshot';
|
|
10
|
+
import { ViewHierarchy } from './integrations/viewhierarchy';
|
|
9
11
|
import { ReactNativeScope } from './scope';
|
|
10
12
|
import { TouchEventBoundary } from './touchevents';
|
|
11
13
|
import { ReactNativeProfiler, ReactNativeTracing } from './tracing';
|
|
12
|
-
import { DEFAULT_BUFFER_SIZE,
|
|
14
|
+
import { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';
|
|
13
15
|
import { makeUtf8TextEncoder } from './transports/TextEncoder';
|
|
14
16
|
import { safeFactory, safeTracesSampler } from './utils/safe';
|
|
15
17
|
const IGNORED_DEFAULT_INTEGRATIONS = [
|
|
@@ -21,14 +23,15 @@ const DEFAULT_OPTIONS = {
|
|
|
21
23
|
enableNativeCrashHandling: true,
|
|
22
24
|
enableNativeNagger: true,
|
|
23
25
|
autoInitializeNativeSdk: true,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
enableAutoPerformanceTracing: true,
|
|
27
|
+
enableWatchdogTerminationTracking: true,
|
|
26
28
|
patchGlobalPromise: true,
|
|
27
29
|
transportOptions: {
|
|
28
30
|
textEncoder: makeUtf8TextEncoder(),
|
|
29
31
|
},
|
|
30
32
|
sendClientReports: true,
|
|
31
33
|
maxQueueSize: DEFAULT_BUFFER_SIZE,
|
|
34
|
+
attachStacktrace: true,
|
|
32
35
|
};
|
|
33
36
|
/**
|
|
34
37
|
* Inits the SDK and returns the final options.
|
|
@@ -40,7 +43,7 @@ export function init(passedOptions) {
|
|
|
40
43
|
const maxQueueSize = (_c = (_a = passedOptions.maxQueueSize) !== null && _a !== void 0 ? _a : (_b = passedOptions.transportOptions) === null || _b === void 0 ? void 0 : _b.bufferSize) !== null && _c !== void 0 ? _c : DEFAULT_OPTIONS.maxQueueSize;
|
|
41
44
|
const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS), passedOptions), {
|
|
42
45
|
// If custom transport factory fails the SDK won't initialize
|
|
43
|
-
transport: passedOptions.transport ||
|
|
46
|
+
transport: passedOptions.transport || makeNativeTransportFactory() || makeFetchTransport, transportOptions: Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS.transportOptions), ((_d = passedOptions.transportOptions) !== null && _d !== void 0 ? _d : {})), { bufferSize: maxQueueSize }), maxQueueSize, integrations: [], stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser), beforeBreadcrumb: safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' }), initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }), tracesSampler: safeTracesSampler(passedOptions.tracesSampler) });
|
|
44
47
|
// As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.
|
|
45
48
|
const tracingEnabled = typeof options.tracesSampler !== 'undefined' ||
|
|
46
49
|
typeof options.tracesSampleRate !== 'undefined';
|
|
@@ -84,10 +87,16 @@ export function init(passedOptions) {
|
|
|
84
87
|
defaultIntegrations.push(new DeviceContext());
|
|
85
88
|
}
|
|
86
89
|
if (tracingEnabled) {
|
|
87
|
-
if (options.
|
|
90
|
+
if (options.enableAutoPerformanceTracing) {
|
|
88
91
|
defaultIntegrations.push(new ReactNativeTracing());
|
|
89
92
|
}
|
|
90
93
|
}
|
|
94
|
+
if (options.attachScreenshot) {
|
|
95
|
+
defaultIntegrations.push(new Screenshot());
|
|
96
|
+
}
|
|
97
|
+
if (options.attachViewHierarchy) {
|
|
98
|
+
defaultIntegrations.push(new ViewHierarchy());
|
|
99
|
+
}
|
|
91
100
|
}
|
|
92
101
|
options.integrations = getIntegrationsToSetup({
|
|
93
102
|
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 { getIntegrationsToSetup, Hub, initAndBind, makeMain, Scope, setExtra } from '@sentry/core';\nimport { RewriteFrames } from '@sentry/integrations';\nimport {\n defaultIntegrations as reactDefaultIntegrations,\n defaultStackParser,\n getCurrentHub,\n} from '@sentry/react';\nimport { Integration, StackFrame, 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 ModulesLoader,\n ReactNativeErrorHandlers,\n ReactNativeInfo,\n Release,\n SdkInfo,\n} from './integrations';\nimport { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { ReactNativeScope } from './scope';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler, ReactNativeTracing } from './tracing';\nimport { DEFAULT_BUFFER_SIZE, makeReactNativeTransport } from './transports/native';\nimport { makeUtf8TextEncoder } from './transports/TextEncoder';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNative: true,\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracking: true,\n enableOutOfMemoryTracking: true,\n patchGlobalPromise: true,\n transportOptions: {\n textEncoder: makeUtf8TextEncoder(),\n },\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\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 const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport || makeReactNativeTransport,\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 // As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.\n const tracingEnabled =\n typeof options.tracesSampler !== 'undefined' ||\n typeof options.tracesSampleRate !== 'undefined';\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 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(new RewriteFrames({\n iteratee: (frame: StackFrame) => {\n if (frame.filename) {\n frame.filename = frame.filename\n .replace(/^file:\\/\\//, '')\n .replace(/^address at /, '')\n .replace(/^.*\\/[^.]+(\\.app|CodePush|.*(?=\\/))/, '');\n\n if (\n frame.filename !== '[native code]' &&\n frame.filename !== 'native'\n ) {\n const appPrefix = 'app://';\n // We always want to have a triple slash\n frame.filename =\n frame.filename.indexOf('/') === 0\n ? `${appPrefix}${frame.filename}`\n : `${appPrefix}/${frame.filename}`;\n }\n }\n return frame;\n },\n }));\n if (options.enableNative) {\n defaultIntegrations.push(new DeviceContext());\n }\n if (tracingEnabled) {\n if (options.enableAutoPerformanceTracking) {\n defaultIntegrations.push(new ReactNativeTracing());\n }\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 */\nexport function wrap<P>(\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 */\n export 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 */\n export 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":"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","sourcesContent":["import type { Scope } from '@sentry/core';\nimport { getIntegrationsToSetup, Hub, initAndBind, makeMain, setExtra } from '@sentry/core';\nimport { RewriteFrames } from '@sentry/integrations';\nimport {\n defaultIntegrations as reactDefaultIntegrations,\n defaultStackParser,\n getCurrentHub,\n makeFetchTransport,\n} from '@sentry/react';\nimport type { Integration, StackFrame, 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 ModulesLoader,\n ReactNativeErrorHandlers,\n ReactNativeInfo,\n Release,\n SdkInfo,\n} from './integrations';\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';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNative: true,\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};\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 const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport || makeNativeTransportFactory() || 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 // As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.\n const tracingEnabled =\n typeof options.tracesSampler !== 'undefined' ||\n typeof options.tracesSampleRate !== 'undefined';\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 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(new RewriteFrames({\n iteratee: (frame: StackFrame) => {\n if (frame.filename) {\n frame.filename = frame.filename\n .replace(/^file:\\/\\//, '')\n .replace(/^address at /, '')\n .replace(/^.*\\/[^.]+(\\.app|CodePush|.*(?=\\/))/, '');\n\n if (\n frame.filename !== '[native code]' &&\n frame.filename !== 'native'\n ) {\n const appPrefix = 'app://';\n // We always want to have a triple slash\n frame.filename =\n frame.filename.indexOf('/') === 0\n ? `${appPrefix}${frame.filename}`\n : `${appPrefix}/${frame.filename}`;\n }\n }\n return frame;\n },\n }));\n if (options.enableNative) {\n defaultIntegrations.push(new DeviceContext());\n }\n if (tracingEnabled) {\n if (options.enableAutoPerformanceTracing) {\n defaultIntegrations.push(new ReactNativeTracing());\n }\n }\n if (options.attachScreenshot) {\n defaultIntegrations.push(new Screenshot());\n }\n if (options.attachViewHierarchy) {\n defaultIntegrations.push(new ViewHierarchy());\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 */\nexport function wrap<P>(\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"]}
|
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export default class ModulesCollector {
|
|
5
5
|
/** Collect method */
|
|
6
|
-
static collect(sources:
|
|
6
|
+
static collect(sources: unknown[], modulesPaths: string[]): Record<string, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Runs collection of modules.
|
|
9
|
+
*/
|
|
10
|
+
static run({ sourceMapPath, outputModulesPath, modulesPaths, collect, }: Partial<{
|
|
11
|
+
sourceMapPath: string;
|
|
12
|
+
outputModulesPath: string;
|
|
13
|
+
modulesPaths: string[];
|
|
14
|
+
collect: (sources: unknown[], modulesPaths: string[]) => Record<string, string>;
|
|
15
|
+
}>): void;
|
|
7
16
|
}
|
|
8
17
|
//# sourceMappingURL=ModulesCollector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModulesCollector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModulesCollector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAEnC,qBAAqB;WACP,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA8DzF;;OAEG;WACW,GAAG,CAAC,EAChB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,OAAO,GACR,EAAE,OAAO,CAAC;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjF,CAAC,GAAG,IAAI;CAgDV"}
|
|
@@ -2,6 +2,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
2
2
|
const utils_1 = require("@sentry/utils");
|
|
3
3
|
const fs_1 = require("fs");
|
|
4
4
|
const path_1 = require("path");
|
|
5
|
+
utils_1.logger.enable();
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
5
7
|
const { dirname, join, resolve, sep: posixSep } = path_1.posix;
|
|
6
8
|
/**
|
|
7
9
|
* Collects JS modules from source paths.
|
|
@@ -13,6 +15,9 @@ class ModulesCollector {
|
|
|
13
15
|
const infos = {};
|
|
14
16
|
const seen = {};
|
|
15
17
|
sources.forEach((path) => {
|
|
18
|
+
if (typeof path !== 'string') {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
16
21
|
let dir = path; // included source file path
|
|
17
22
|
let candidate = null;
|
|
18
23
|
/** Traverse directories upward in the search of all package.json files */
|
|
@@ -47,7 +52,7 @@ class ModulesCollector {
|
|
|
47
52
|
};
|
|
48
53
|
}
|
|
49
54
|
catch (error) {
|
|
50
|
-
utils_1.logger.
|
|
55
|
+
utils_1.logger.error(`Failed to read ${pkgPath}`);
|
|
51
56
|
}
|
|
52
57
|
return upDirSearch(); // processed package.json file, continue up search
|
|
53
58
|
};
|
|
@@ -55,6 +60,51 @@ class ModulesCollector {
|
|
|
55
60
|
});
|
|
56
61
|
return infos;
|
|
57
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Runs collection of modules.
|
|
65
|
+
*/
|
|
66
|
+
static run({ sourceMapPath, outputModulesPath, modulesPaths, collect, }) {
|
|
67
|
+
if (!sourceMapPath) {
|
|
68
|
+
utils_1.logger.error('First argument `source-map-path` is missing!');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!outputModulesPath) {
|
|
72
|
+
utils_1.logger.error('Second argument `modules-output-path` is missing!');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!modulesPaths || modulesPaths.length === 0) {
|
|
76
|
+
utils_1.logger.error('Third argument `modules-paths` is missing!');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
utils_1.logger.info('Reading source map from', sourceMapPath);
|
|
80
|
+
utils_1.logger.info('Saving modules to', outputModulesPath);
|
|
81
|
+
utils_1.logger.info('Resolving modules from paths', outputModulesPath);
|
|
82
|
+
if (!fs_1.existsSync(sourceMapPath)) {
|
|
83
|
+
utils_1.logger.error(`Source map file does not exist at ${sourceMapPath}`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
for (const modulesPath of modulesPaths) {
|
|
87
|
+
if (!fs_1.existsSync(modulesPath)) {
|
|
88
|
+
utils_1.logger.error(`Modules path does not exist at ${modulesPath}`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const map = JSON.parse(fs_1.readFileSync(sourceMapPath, 'utf8'));
|
|
93
|
+
if (!map.sources || !Array.isArray(map.sources)) {
|
|
94
|
+
utils_1.logger.error(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const sources = map.sources;
|
|
98
|
+
const modules = collect
|
|
99
|
+
? collect(sources, modulesPaths)
|
|
100
|
+
: ModulesCollector.collect(sources, modulesPaths);
|
|
101
|
+
const outputModulesDirPath = dirname(outputModulesPath);
|
|
102
|
+
if (!fs_1.existsSync(outputModulesDirPath)) {
|
|
103
|
+
fs_1.mkdirSync(outputModulesDirPath, { recursive: true });
|
|
104
|
+
}
|
|
105
|
+
fs_1.writeFileSync(outputModulesPath, JSON.stringify(modules, null, 2));
|
|
106
|
+
utils_1.logger.info(`Modules collected and saved to: ${outputModulesPath}`);
|
|
107
|
+
}
|
|
58
108
|
}
|
|
59
109
|
exports.default = ModulesCollector;
|
|
60
110
|
//# sourceMappingURL=ModulesCollector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModulesCollector.js","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":";AAAA,yCAAuC;AACvC,
|
|
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\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 (\n !dir ||\n parentDir === dir ||\n seen[dir]\n ) {\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\n ? collect(sources, modulesPaths)\n : 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}\n"]}
|
|
@@ -1,32 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
|
|
3
|
-
const fs_1 = require("fs");
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
4
3
|
const process_1 = require("process");
|
|
5
4
|
const ModulesCollector_1 = require("./ModulesCollector");
|
|
6
|
-
const sourceMapPath = process_1.argv[2];
|
|
7
|
-
const outputModulesPath = process_1.argv[3];
|
|
8
|
-
const modulesPaths = process_1.argv[4]
|
|
9
|
-
? process_1.argv[4].split(',')
|
|
5
|
+
const sourceMapPath = process_1.argv[2];
|
|
6
|
+
const outputModulesPath = process_1.argv[3];
|
|
7
|
+
const modulesPaths = process_1.argv[4]
|
|
8
|
+
? process_1.argv[4].split(',')
|
|
10
9
|
: [];
|
|
11
|
-
|
|
12
|
-
exitGracefully('First argument `source-map-path` is missing!');
|
|
13
|
-
}
|
|
14
|
-
if (!outputModulesPath) {
|
|
15
|
-
exitGracefully('Second argument `modules-output-path` is missing!');
|
|
16
|
-
}
|
|
17
|
-
if (modulesPaths.length === 0) {
|
|
18
|
-
exitGracefully('Third argument `modules-paths` is missing!');
|
|
19
|
-
}
|
|
20
|
-
const map = JSON.parse(fs_1.readFileSync(sourceMapPath, 'utf8'));
|
|
21
|
-
if (!map.sources) {
|
|
22
|
-
exitGracefully(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);
|
|
23
|
-
}
|
|
24
|
-
const sources = map.sources;
|
|
25
|
-
const modules = ModulesCollector_1.default.collect(sources, modulesPaths);
|
|
26
|
-
fs_1.writeFileSync(outputModulesPath, JSON.stringify(modules, null, 2));
|
|
27
|
-
function exitGracefully(message) {
|
|
28
|
-
utils_1.logger.error(message);
|
|
29
|
-
process_1.exit(0);
|
|
30
|
-
}
|
|
31
|
-
;
|
|
10
|
+
ModulesCollector_1.default.run({ sourceMapPath, outputModulesPath, modulesPaths });
|
|
32
11
|
//# sourceMappingURL=collectModules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectModules.js","sourceRoot":"","sources":["../../../src/js/tools/collectModules.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"collectModules.js","sourceRoot":"","sources":["../../../src/js/tools/collectModules.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qCAA+B;AAE/B,yDAAkD;AAElD,MAAM,aAAa,GAAuB,cAAI,CAAC,CAAC,CAAC,CAAC;AAClD,MAAM,iBAAiB,GAAuB,cAAI,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,YAAY,GAAa,cAAI,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,cAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC;AAEP,0BAAgB,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { argv } from 'process';\n\nimport ModulesCollector from './ModulesCollector';\n\nconst sourceMapPath: string | undefined = argv[2];\nconst outputModulesPath: string | undefined = argv[3];\nconst modulesPaths: string[] = argv[4]\n ? argv[4].split(',')\n : [];\n\nModulesCollector.run({ sourceMapPath, outputModulesPath, modulesPaths });\n"]}
|
package/dist/js/touchevents.d.ts
CHANGED
|
@@ -26,6 +26,10 @@ export declare type TouchEventBoundaryProps = {
|
|
|
26
26
|
* React Node wrapped by TouchEventBoundary.
|
|
27
27
|
*/
|
|
28
28
|
children?: React.ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* Label Name used to identify the touched element.
|
|
31
|
+
*/
|
|
32
|
+
labelName?: string;
|
|
29
33
|
};
|
|
30
34
|
/**
|
|
31
35
|
* Boundary to log breadcrumbs for interaction events.
|
|
@@ -33,6 +37,11 @@ export declare type TouchEventBoundaryProps = {
|
|
|
33
37
|
declare class TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {
|
|
34
38
|
static displayName: string;
|
|
35
39
|
static defaultProps: Partial<TouchEventBoundaryProps>;
|
|
40
|
+
readonly name: string;
|
|
41
|
+
/**
|
|
42
|
+
* Registers the TouchEventBoundary as a Sentry Integration.
|
|
43
|
+
*/
|
|
44
|
+
componentDidMount(): void;
|
|
36
45
|
/**
|
|
37
46
|
*
|
|
38
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,oBAAY,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;AAuBF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;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;CAyEtB;AAED;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,gIAc3B,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/js/touchevents.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { addBreadcrumb } from '@sentry/core';
|
|
1
|
+
import { addBreadcrumb, getCurrentHub } from '@sentry/core';
|
|
2
2
|
import { logger } from '@sentry/utils';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import { createIntegration } from './integrations/factory';
|
|
5
6
|
const touchEventStyles = StyleSheet.create({
|
|
6
7
|
wrapperView: {
|
|
7
8
|
flex: 1,
|
|
@@ -15,6 +16,17 @@ const PROP_KEY = 'sentry-label';
|
|
|
15
16
|
* Boundary to log breadcrumbs for interaction events.
|
|
16
17
|
*/
|
|
17
18
|
class TouchEventBoundary extends React.Component {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
|
+
this.name = 'TouchEventBoundary';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Registers the TouchEventBoundary as a Sentry Integration.
|
|
25
|
+
*/
|
|
26
|
+
componentDidMount() {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
(_b = (_a = getCurrentHub().getClient()) === null || _a === void 0 ? void 0 : _a.addIntegration) === null || _b === void 0 ? void 0 : _b.call(_a, createIntegration(this.name));
|
|
29
|
+
}
|
|
18
30
|
/**
|
|
19
31
|
*
|
|
20
32
|
*/
|
|
@@ -37,7 +49,7 @@ class TouchEventBoundary extends React.Component {
|
|
|
37
49
|
message: activeLabel
|
|
38
50
|
? `Touch event within element: ${activeLabel}`
|
|
39
51
|
: 'Touch event within component tree',
|
|
40
|
-
type: this.props.breadcrumbType
|
|
52
|
+
type: this.props.breadcrumbType,
|
|
41
53
|
};
|
|
42
54
|
addBreadcrumb(crumb);
|
|
43
55
|
logger.log(`[TouchEvents] ${crumb.message}`);
|
|
@@ -85,6 +97,11 @@ class TouchEventBoundary extends React.Component {
|
|
|
85
97
|
const label = typeof (props === null || props === void 0 ? void 0 : props[PROP_KEY]) !== 'undefined'
|
|
86
98
|
? `${props[PROP_KEY]}`
|
|
87
99
|
: undefined;
|
|
100
|
+
// For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in
|
|
101
|
+
// the "check-label" if sentence, so we have to assign it to a variable here first
|
|
102
|
+
let labelValue;
|
|
103
|
+
if (typeof this.props.labelName === 'string')
|
|
104
|
+
labelValue = props === null || props === void 0 ? void 0 : props[this.props.labelName];
|
|
88
105
|
// Check the label first
|
|
89
106
|
if (label && !this._isNameIgnored(label)) {
|
|
90
107
|
if (!activeLabel) {
|
|
@@ -92,12 +109,12 @@ class TouchEventBoundary extends React.Component {
|
|
|
92
109
|
}
|
|
93
110
|
componentTreeNames.push(label);
|
|
94
111
|
}
|
|
95
|
-
else if (typeof
|
|
96
|
-
!this._isNameIgnored(
|
|
112
|
+
else if (typeof labelValue === 'string' &&
|
|
113
|
+
!this._isNameIgnored(labelValue)) {
|
|
97
114
|
if (!activeLabel) {
|
|
98
|
-
activeLabel =
|
|
115
|
+
activeLabel = labelValue;
|
|
99
116
|
}
|
|
100
|
-
componentTreeNames.push(
|
|
117
|
+
componentTreeNames.push(labelValue);
|
|
101
118
|
}
|
|
102
119
|
else if (currentInst.elementType) {
|
|
103
120
|
const { elementType } = currentInst;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchevents.js","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AA+BhD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE;QACX,IAAI,EAAE,CAAC;KACR;CACF,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAC5C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C,MAAM,QAAQ,GAAG,cAAc,CAAC;AAWhC;;GAEG;AACH,MAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAkC;IASvE;;OAEG;IACI,MAAM;QACX,OAAO,CACL,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC;QACpC,8DAA8D;QAC9D,YAAY,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAC,CAEnD;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CACtB;MAAA,EAAE,IAAI,CAAC,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,kBAA4B,EAC5B,WAAoB;QAEpB,MAAM,KAAK,GAAG,MAAuB,CAAC;QACtC,MAAM,KAAK,GAAG;YACZ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB;YACvC,IAAI,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE;YAC3C,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,WAAW;gBAClB,CAAC,CAAC,+BAA+B,WAAW,EAAE;gBAC9C,CAAC,CAAC,mCAAmC;YACvC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;SAChC,CAAA;QACD,aAAa,CAAC,KAAK,CAAC,CAAC;QAErB,MAAM,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAY;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/C,mDAAmD;QACnD,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAClC,oDAAoD;YACpD,mDAAmD;YACnD,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACnE;QAED,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,UAA2B,EAAE,EAAE,CAC9B,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC;YACvD,CAAC,UAAU,YAAY,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,8IAA8I;IAC9I,0DAA0D;IAC1D,kDAAkD;IAElD;;;OAGG;IACH,sCAAsC;IAC9B,aAAa,CAAC,CAAoC;;QACxD,IAAI,CAAC,CAAC,WAAW,EAAE;YACjB,IAAI,WAAW,GAAgC,CAAC,CAAC,WAAW,CAAC;YAE7D,IAAI,WAA+B,CAAC;YACpC,IAAI,iBAAqC,CAAC;YAC1C,MAAM,kBAAkB,GAAa,EAAE,CAAC;YAExC,OACE,WAAW;gBACX,+GAA+G;gBAC/G,IAAI,CAAC,KAAK,CAAC,oBAAoB;gBAC/B,kBAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAC3D;gBACA;gBACE,kDAAkD;gBAClD,OAAA,WAAW,CAAC,WAAW,0CAAE,WAAW;oBACpC,kBAAkB,CAAC,WAAW,EAC9B;oBACA,MAAM;iBACP;gBAED,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC;gBACxC,MAAM,KAAK,GACT,QAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,QAAQ,EAAC,KAAK,WAAW;oBACtC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACtB,CAAC,CAAC,SAAS,CAAC;gBAEhB,wBAAwB;gBACxB,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;oBACxC,IAAI,CAAC,WAAW,EAAE;wBAChB,WAAW,GAAG,KAAK,CAAC;qBACrB;oBACD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChC;qBAAM,IACL,QAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,CAAA,KAAK,QAAQ;oBAC7C,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAC9C;oBACA,IAAI,CAAC,WAAW,EAAE;wBAChB,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC;qBACxC;oBACD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;iBACnD;qBAAM,IAAI,WAAW,CAAC,WAAW,EAAE;oBAClC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;oBAEpC,IACE,WAAW,CAAC,WAAW;wBACvB,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,EAC7C;wBACA,qBAAqB;wBACrB,IAAI,CAAC,iBAAiB,EAAE;4BACtB,iBAAiB,GAAG,WAAW,CAAC,WAAW,CAAC;yBAC7C;wBACD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;qBAClD;iBACF;gBAED,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;aAClC;YAED,MAAM,UAAU,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,iBAAiB,CAAC;YAEpD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,EAAE;gBAC/C,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;aACrD;SACF;IACH,CAAC;;AA3Ia,8BAAW,GAAW,6BAA6B,CAAC;AACpD,+BAAY,GAAqC;IAC7D,kBAAkB,EAAE,2BAA2B;IAC/C,cAAc,EAAE,uBAAuB;IACvC,WAAW,EAAE,EAAE;IACf,oBAAoB,EAAE,+BAA+B;CACtD,CAAC;AAwIJ;;;;GAIG;AACH,MAAM,sBAAsB,GAAG;AAC7B,8DAA8D;AAC9D,cAAwC,EACxC,aAAuC,EACd,EAAE;IAC3B,MAAM,gBAAgB,GAA4B,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3D,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE,CAAC,CAAC,CAC5C;MAAA,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAC5B;IAAA,EAAE,kBAAkB,CAAC,CACtB,CAAC;IAEF,gBAAgB,CAAC,WAAW,GAAG,wBAAwB,CAAC;IAExD,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC","sourcesContent":["import { addBreadcrumb } from '@sentry/core';\nimport { SeverityLevel } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\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\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 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\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\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 /**\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: { _targetInst?: ElementInstance }): void {\n if (e._targetInst) {\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 label =\n typeof props?.[PROP_KEY] !== 'undefined'\n ? `${props[PROP_KEY]}`\n : undefined;\n\n // Check the label first\n if (label && !this._isNameIgnored(label)) {\n if (!activeLabel) {\n activeLabel = label;\n }\n componentTreeNames.push(label);\n } else if (\n typeof props?.accessibilityLabel === 'string' &&\n !this._isNameIgnored(props.accessibilityLabel)\n ) {\n if (!activeLabel) {\n activeLabel = props.accessibilityLabel;\n }\n componentTreeNames.push(props.accessibilityLabel);\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 }\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 { StyleSheet, View } from 'react-native';\n\nimport { createIntegration } from './integrations/factory';\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 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\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\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 /**\n * Registers the TouchEventBoundary as a Sentry Integration.\n */\n public componentDidMount(): void {\n getCurrentHub().getClient()?.addIntegration?.(createIntegration(this.name));\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: { _targetInst?: ElementInstance }): void {\n if (e._targetInst) {\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 label =\n typeof props?.[PROP_KEY] !== 'undefined'\n ? `${props[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 (label && !this._isNameIgnored(label)) {\n if (!activeLabel) {\n activeLabel = label;\n }\n componentTreeNames.push(label);\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 }\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,5 +1,5 @@
|
|
|
1
|
-
import { Transaction } from '@sentry/tracing';
|
|
2
|
-
import { EventProcessor, Measurements, MeasurementUnit } from '@sentry/types';
|
|
1
|
+
import type { Transaction } from '@sentry/tracing';
|
|
2
|
+
import type { EventProcessor, Measurements, MeasurementUnit } from '@sentry/types';
|
|
3
3
|
export interface FramesMeasurements extends Measurements {
|
|
4
4
|
'frames_total': {
|
|
5
5
|
value: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeframes.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/nativeframes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"nativeframes.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/nativeframes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAS,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAO1F,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC;IACzD,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC;IACxD,eAAe,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC;CAC3D;AAQD;;GAEG;AACH,qBAAa,2BAA2B;IACtC,0EAA0E;IAC1E,OAAO,CAAC,aAAa,CAGP;IACd,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,oEAAoE;IACpE,OAAO,CAAC,qBAAqB,CAAC,CAG5B;gBAGA,uBAAuB,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,EACpD,SAAS,EAAE,MAAM,OAAO;IAS1B;;;OAGG;IACI,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAczD;;OAEG;IACI,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI1D;;;OAGG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8C5B;;OAEG;YACW,0BAA0B;IAwBxC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;YACW,aAAa;CA0D5B"}
|