@dynatrace/react-native-plugin 2.307.1 → 2.311.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -4
- package/android/build.gradle +3 -1
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceAppStartModule.kt +128 -0
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceInternalModule.kt +22 -0
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceRNBridgeImpl.kt +411 -0
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceReactPackage.kt +54 -0
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceUtils.kt +86 -0
- package/android/src/main/java/com/dynatrace/android/agent/model/AppStartMeasurement.kt +15 -0
- package/android/src/main/java/com/dynatrace/android/agent/model/AppStartMeasurementType.kt +18 -0
- package/android/src/new/java/com/dynatrace/android/agent/DynatraceRNBridge.kt +228 -0
- package/android/src/old/java/com/dynatrace/android/agent/DynatraceRNBridge.kt +258 -0
- package/files/plugin.gradle +1 -1
- package/index.js +10 -10
- package/instrumentation/DynatraceInstrumentation.js +1 -0
- package/{lib → instrumentation/jsx}/CreateElement.js +6 -5
- package/{lib/instrumentor/base → instrumentation/jsx}/ElementHelper.js +14 -12
- package/instrumentation/jsx/JsxDevRuntime.js +54 -0
- package/instrumentation/jsx/JsxRuntime.js +57 -0
- package/instrumentation/jsx/JsxRuntimeUtil.js +31 -0
- package/instrumentation/jsx/components/ClassComponent.js +49 -0
- package/instrumentation/jsx/components/ComponentUtil.js +33 -0
- package/instrumentation/jsx/components/FunctionalComponent.js +15 -0
- package/{lib/instrumentor/base → instrumentation/jsx/components}/Picker.js +1 -1
- package/{lib/instrumentor/base → instrumentation/jsx/components}/RefreshControl.js +1 -1
- package/{lib/instrumentor/base → instrumentation/jsx/components}/Switch.js +8 -8
- package/{lib/instrumentor/base → instrumentation/jsx/components}/Touchable.js +8 -8
- package/instrumentation/libs/community/Picker.InstrInfo.js +20 -0
- package/{lib → instrumentation/libs}/community/Picker.js +1 -1
- package/instrumentation/libs/community/gesture-handler/Touchables.InstrInfo.js +23 -0
- package/{lib → instrumentation/libs}/community/gesture-handler/Touchables.js +1 -1
- package/{lib → instrumentation/libs}/react-native/RefreshControl.InstrInfo.js +2 -2
- package/{lib → instrumentation/libs}/react-native/RefreshControl.js +5 -5
- package/{lib → instrumentation/libs}/react-native/Switch.InstrInfo.js +2 -2
- package/{lib → instrumentation/libs}/react-native/Switch.js +5 -5
- package/instrumentation/libs/react-native/Touchables.InstrInfo.js +25 -0
- package/{lib → instrumentation/libs}/react-native/Touchables.js +1 -1
- package/{lib → instrumentation/libs}/react-navigation/ReactNavigation.js +6 -5
- package/{lib/instrumentor → instrumentation}/model/Types.js +1 -14
- package/instrumentation/model/TypesUtil.js +50 -0
- package/ios/DynatraceRNBridge.h +10 -1
- package/ios/DynatraceRNBridge.mm +152 -1
- package/jsx-dev-runtime.js +1 -1
- package/jsx-runtime.js +1 -1
- package/lib/core/Application.js +20 -0
- package/lib/{instrumentor/base → core}/Dynatrace.js +72 -48
- package/lib/{instrumentor/base → core}/DynatraceAction.js +23 -22
- package/lib/core/DynatraceInternal.js +46 -0
- package/lib/{instrumentor/base → core}/DynatraceRootAction.js +5 -4
- package/lib/{instrumentor/base → core}/DynatraceWebRequestTiming.js +6 -5
- package/lib/{instrumentor/base → core}/ErrorHandler.js +6 -5
- package/lib/{instrumentor/base → core}/configuration/Configuration.js +1 -1
- package/lib/{instrumentor/base → core}/configuration/ConfigurationDefaults.js +1 -2
- package/lib/{instrumentor/base → core}/configuration/ConfigurationHandler.js +2 -2
- package/lib/{instrumentor/base → core}/configuration/ManualStartupConfiguration.js +1 -1
- package/lib/core/logging/ConsoleLogger.js +27 -0
- package/lib/core/logging/LogLevel.js +12 -0
- package/lib/dynatrace-transformer.js +1 -1
- package/lib/next/Dynatrace.js +88 -0
- package/lib/next/DynatraceSecondGenForwarder.js +35 -0
- package/lib/next/IDynatrace.js +2 -0
- package/lib/next/IDynatraceForwarder.js +2 -0
- package/lib/next/appstart/AppStartObserver.js +34 -0
- package/lib/next/appstart/AppStartType.js +38 -0
- package/lib/next/events/EventCreator.js +77 -0
- package/lib/next/events/EventPipeline.js +58 -0
- package/lib/next/events/EventTimestamp.js +27 -0
- package/lib/next/events/ViewInfoCreator.js +27 -0
- package/lib/next/events/modifier/BaseDataEventModifier.js +31 -0
- package/lib/next/events/modifier/EventLimitation.js +69 -0
- package/lib/next/events/modifier/EventModifierUtil.js +89 -0
- package/lib/next/events/modifier/IEventModifier.js +2 -0
- package/lib/next/events/modifier/ModifyEventValidation.js +189 -0
- package/lib/next/events/modifier/SendEventValidation.js +86 -0
- package/lib/next/events/modifier/ValueRestrictionModifier.js +56 -0
- package/lib/next/events/spec/EventFieldKeysEnum.js +2 -0
- package/lib/next/events/spec/EventSpecContstants.js +47 -0
- package/lib/next/events/spec/IAppStartEvent.js +2 -0
- package/lib/next/events/spec/ICrashEvent.js +2 -0
- package/lib/next/events/spec/IErrorCodeEvent.js +2 -0
- package/lib/next/events/spec/IErrorExceptionEvent.js +2 -0
- package/lib/next/events/spec/IReactNativeEvent.js +2 -0
- package/lib/next/events/spec/IRumEvent.js +2 -0
- package/lib/next/provider/ITimestampProvider.js +2 -0
- package/lib/next/provider/TimestampProvider.js +10 -0
- package/package.json +42 -33
- package/react-native-dynatrace.podspec +1 -1
- package/scripts/Android.js +10 -4
- package/scripts/PathsConstants.js +3 -1
- package/scripts/core/InstrumentCall.js +1 -0
- package/src/lib/{instrumentor/base → core}/interface/NativeDynatraceBridge.ts +8 -0
- package/typings/react-native-dynatrace.d.ts +73 -0
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceRNBridgeImpl.java +0 -366
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceReactPackage.java +0 -67
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceUtils.java +0 -108
- package/android/src/main/java/com/dynatrace/android/agent/PrivateDTBridge.java +0 -28
- package/android/src/new/java/com/dynatrace/android/agent/DynatraceRNBridge.java +0 -192
- package/android/src/old/java/com/dynatrace/android/agent/DynatraceRNBridge.java +0 -194
- package/lib/community/Picker.InstrInfo.js +0 -20
- package/lib/community/gesture-handler/Touchables.InstrInfo.js +0 -56
- package/lib/instrumentor/DynatraceInstrumentation.js +0 -1
- package/lib/instrumentor/base/Application.js +0 -16
- package/lib/instrumentor/base/DynatraceInternal.js +0 -34
- package/lib/instrumentor/base/Logger.js +0 -16
- package/lib/instrumentor/base/model/LogLevel.js +0 -17
- package/lib/jsx-dev-runtime.js +0 -70
- package/lib/jsx-runtime.js +0 -69
- package/lib/react/Component.js +0 -90
- package/lib/react-native/Touchables.InstrInfo.js +0 -60
- /package/{lib/instrumentor/base/interface → instrumentation/jsx}/IDynatraceProperties.js +0 -0
- /package/{lib → instrumentation/libs}/community/gesture-handler/index.js +0 -0
- /package/{lib → instrumentation/libs}/gesture-handler.js +0 -0
- /package/{lib → instrumentation/libs}/react-native/index.js +0 -0
- /package/{lib → instrumentation/libs}/react-native.js +0 -0
- /package/{lib/instrumentor → instrumentation}/model/Reference.js +0 -0
- /package/{lib/instrumentor → instrumentation}/parser/Babel.js +0 -0
- /package/lib/{instrumentor/base → core}/DynatraceBridge.js +0 -0
- /package/lib/{instrumentor/base → core}/NullAction.js +0 -0
- /package/lib/{instrumentor/base → core}/NullRootAction.js +0 -0
- /package/lib/{instrumentor/base → core}/NullWebRequestTiming.js +0 -0
- /package/lib/{instrumentor/base → core}/UserPrivacyOptions.js +0 -0
- /package/lib/{instrumentor/base → core}/configuration/ConfigurationBuilder.js +0 -0
- /package/lib/{instrumentor/base → core}/configuration/ConfigurationPreset.js +0 -0
- /package/lib/{instrumentor/base → core}/configuration/IConfiguration.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/IDynatrace.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/IDynatraceAction.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/IDynatraceInternal.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/IDynatraceRootAction.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/IWebRequestTiming.js +0 -0
- /package/lib/{instrumentor/base → core}/interface/NativeDynatraceBridge.js +0 -0
- /package/lib/{instrumentor/base/interface → core/logging}/ILogger.js +0 -0
- /package/lib/{instrumentor/base → core}/model/DataCollectionLevel.js +0 -0
- /package/lib/{instrumentor/base → core}/model/Json.js +0 -0
- /package/lib/{instrumentor/base → core}/model/Platform.js +0 -0
- /package/lib/{instrumentor/base → core}/util/StringUtils.js +0 -0
|
@@ -3,105 +3,106 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DynatraceAction = void 0;
|
|
4
4
|
const StringUtils_1 = require("./util/StringUtils");
|
|
5
5
|
const DynatraceBridge_1 = require("./DynatraceBridge");
|
|
6
|
-
const
|
|
6
|
+
const ConsoleLogger_1 = require("./logging/ConsoleLogger");
|
|
7
7
|
class DynatraceAction {
|
|
8
8
|
constructor(key, name, manual) {
|
|
9
9
|
this.key = key;
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.manual = manual;
|
|
12
12
|
this.closed = false;
|
|
13
|
+
this.logger = new ConsoleLogger_1.ConsoleLogger('DynatraceAction');
|
|
13
14
|
}
|
|
14
15
|
reportError(errorName, errorCode, platform) {
|
|
15
16
|
if (this.closed) {
|
|
16
|
-
|
|
17
|
+
this.logger.debug(`reportError(${errorName}, ${errorCode}): Action was closed already!`);
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
20
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(errorName)) {
|
|
20
21
|
DynatraceBridge_1.DynatraceNative.reportErrorInAction(this.key, errorName, errorCode, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
21
|
-
|
|
22
|
+
this.logger.debug(`reportError(${errorName}, ${errorCode}): in Action - ${this.name}`);
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
|
-
|
|
25
|
+
this.logger.debug(`reportError(errorName, errorCode): Error will not be reported because errorName is invalid! errorName: ${errorName}, errorCode: ${errorCode}`);
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
reportEvent(eventName, platform) {
|
|
28
29
|
if (this.closed) {
|
|
29
|
-
|
|
30
|
+
this.logger.debug(`reportEvent(${eventName}): Action was closed already!`);
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(eventName)) {
|
|
33
34
|
DynatraceBridge_1.DynatraceNative.reportEventInAction(this.key, eventName, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
34
|
-
|
|
35
|
+
this.logger.debug(`reportEvent(${eventName}): in Action - ${this.name}`);
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
|
-
|
|
38
|
+
this.logger.debug(`reportEvent(eventName): Event will not be reported because eventName is invalid! eventName: ${eventName} in Action - ${this.name}`);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
reportStringValue(valueName, value, platform) {
|
|
41
42
|
if (this.closed) {
|
|
42
|
-
|
|
43
|
+
this.logger.debug(`reportStringValue(${valueName}, ${value}): Action was closed already!`);
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName)) {
|
|
46
47
|
DynatraceBridge_1.DynatraceNative.reportStringValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
47
|
-
|
|
48
|
+
this.logger.debug(`reportStringValue(${valueName}, ${value}): in Action - ${this.name}`);
|
|
48
49
|
}
|
|
49
50
|
else {
|
|
50
|
-
|
|
51
|
+
this.logger.debug(`reportStringValue(valueName, value): String value will not be reported because valueName is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
reportIntValue(valueName, value, platform) {
|
|
54
55
|
if (this.closed) {
|
|
55
|
-
|
|
56
|
+
this.logger.debug(`reportIntValue(${valueName}, ${value}): Action was closed already!`);
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
59
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName)) {
|
|
59
60
|
DynatraceBridge_1.DynatraceNative.reportIntValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
60
|
-
|
|
61
|
+
this.logger.debug(`reportIntValue(${valueName}, ${value}): in Action - ${this.name}`);
|
|
61
62
|
}
|
|
62
63
|
else {
|
|
63
|
-
|
|
64
|
+
this.logger.debug(`reportIntValue(valueName, value): Int value will not be reported because valueName is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
reportDoubleValue(valueName, value, platform) {
|
|
67
68
|
if (this.closed) {
|
|
68
|
-
|
|
69
|
+
this.logger.debug(`reportDoubleValue(${valueName}, ${value}): Action was closed already!`);
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
71
72
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName)) {
|
|
72
73
|
DynatraceBridge_1.DynatraceNative.reportDoubleValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
73
|
-
|
|
74
|
+
this.logger.debug(`reportDoubleValue(${valueName}, ${value}): in Action - ${this.name}`);
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
76
|
-
|
|
77
|
+
this.logger.debug(`reportDoubleValue(valueName, value): Double value will not be reported because valueName is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
leaveAction(platform) {
|
|
80
81
|
if (this.closed) {
|
|
81
|
-
|
|
82
|
+
this.logger.debug('leaveAction(): Action was closed already!');
|
|
82
83
|
return;
|
|
83
84
|
}
|
|
84
85
|
this.closed = true;
|
|
85
|
-
|
|
86
|
+
this.logger.debug(`leaveAction(): ${this.name}`);
|
|
86
87
|
DynatraceBridge_1.DynatraceNative.leaveAction(this.key, this.manual, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
87
88
|
}
|
|
88
89
|
cancel(platform) {
|
|
89
90
|
if (this.closed) {
|
|
90
|
-
|
|
91
|
+
this.logger.debug('cancelAction(): Action was closed already!');
|
|
91
92
|
return;
|
|
92
93
|
}
|
|
93
94
|
this.closed = true;
|
|
94
|
-
|
|
95
|
+
this.logger.debug(`cancelAction(): ${this.name}`);
|
|
95
96
|
DynatraceBridge_1.DynatraceNative.cancelAction(this.key, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
96
97
|
}
|
|
97
98
|
getRequestTag(url) {
|
|
98
99
|
if (this.closed) {
|
|
99
|
-
|
|
100
|
+
this.logger.debug(`getRequestTag(${url}): Action was closed already!`);
|
|
100
101
|
return new Promise((resolve) => {
|
|
101
102
|
resolve('');
|
|
102
103
|
});
|
|
103
104
|
}
|
|
104
|
-
|
|
105
|
+
this.logger.debug(`getRequestTag(${url}): in Action - ${this.name}`);
|
|
105
106
|
return DynatraceBridge_1.DynatraceNative.getRequestTag(this.key, url);
|
|
106
107
|
}
|
|
107
108
|
getRequestTagHeader() {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynatraceInternal = void 0;
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
|
+
const Dynatrace_1 = require("../next/Dynatrace");
|
|
6
|
+
const DynatraceBridge_1 = require("./DynatraceBridge");
|
|
7
|
+
const StringUtils_1 = require("./util/StringUtils");
|
|
8
|
+
const ConsoleLogger_1 = require("./logging/ConsoleLogger");
|
|
9
|
+
let counter = 0;
|
|
10
|
+
const logger = new ConsoleLogger_1.ConsoleLogger('DyntraceInt');
|
|
11
|
+
exports.DynatraceInternal = {
|
|
12
|
+
reportErrorFromHandler: (isFatal, errorName, reason, stacktrace, isReportFatalErrorAsCrash, platform) => {
|
|
13
|
+
if (isFatal && isReportFatalErrorAsCrash) {
|
|
14
|
+
if (react_native_1.Platform.OS === 'ios') {
|
|
15
|
+
logger.debug(`storeCrash(${errorName}, ${reason}, ${stacktrace})`);
|
|
16
|
+
DynatraceBridge_1.DynatraceNative.storeCrash(errorName, reason, stacktrace);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
logger.debug(`reportCrash(${errorName}, ${reason}, ${stacktrace})`);
|
|
20
|
+
DynatraceBridge_1.DynatraceNative.reportCrash(errorName, reason, stacktrace, true, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
21
|
+
}
|
|
22
|
+
Dynatrace_1.Dynatrace.reportCrash({
|
|
23
|
+
name: errorName,
|
|
24
|
+
message: reason,
|
|
25
|
+
stack: stacktrace,
|
|
26
|
+
}, false, isFatal);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(stacktrace)) {
|
|
30
|
+
logger.debug(`reportError(${errorName}, ${reason}, ${stacktrace})`);
|
|
31
|
+
DynatraceBridge_1.DynatraceNative.reportError(errorName, '-', reason, stacktrace, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
32
|
+
Dynatrace_1.Dynatrace.reportError({
|
|
33
|
+
name: errorName,
|
|
34
|
+
message: reason,
|
|
35
|
+
stack: stacktrace,
|
|
36
|
+
}, false);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
logger.debug(`reportError(${errorName})`);
|
|
40
|
+
DynatraceBridge_1.DynatraceNative.reportErrorWithoutStacktrace(errorName, -1);
|
|
41
|
+
Dynatrace_1.Dynatrace.reportErrorCode(errorName, -1, false);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
getCounter: () => counter++,
|
|
46
|
+
};
|
|
@@ -3,18 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DynatraceRootAction = void 0;
|
|
4
4
|
const StringUtils_1 = require("./util/StringUtils");
|
|
5
5
|
const DynatraceBridge_1 = require("./DynatraceBridge");
|
|
6
|
-
const Logger_1 = require("./Logger");
|
|
7
6
|
const DynatraceAction_1 = require("./DynatraceAction");
|
|
8
7
|
const NullAction_1 = require("./NullAction");
|
|
9
8
|
const DynatraceInternal_1 = require("./DynatraceInternal");
|
|
10
9
|
const ConfigurationHandler_1 = require("./configuration/ConfigurationHandler");
|
|
10
|
+
const ConsoleLogger_1 = require("./logging/ConsoleLogger");
|
|
11
11
|
class DynatraceRootAction extends DynatraceAction_1.DynatraceAction {
|
|
12
12
|
constructor(key, name) {
|
|
13
13
|
super(key, name, true);
|
|
14
|
+
this.logger = new ConsoleLogger_1.ConsoleLogger('DynatraceRootAction');
|
|
14
15
|
}
|
|
15
16
|
enterAction(name, platform) {
|
|
16
17
|
if (this.closed) {
|
|
17
|
-
|
|
18
|
+
this.logger.debug(`enterAction(${name}): Action was closed already!`);
|
|
18
19
|
return new NullAction_1.NullAction();
|
|
19
20
|
}
|
|
20
21
|
let childKey;
|
|
@@ -28,12 +29,12 @@ class DynatraceRootAction extends DynatraceAction_1.DynatraceAction {
|
|
|
28
29
|
childKey = 'DEFAULT_' + DynatraceInternal_1.DynatraceInternal.getCounter();
|
|
29
30
|
}
|
|
30
31
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(name)) {
|
|
31
|
-
|
|
32
|
+
this.logger.debug(`enterAction(${name})`);
|
|
32
33
|
DynatraceBridge_1.DynatraceNative.enterManualActionWithParent(name, childKey, this.key, platform === null || platform === void 0 ? void 0 : platform.toString());
|
|
33
34
|
return new DynatraceAction_1.DynatraceAction(childKey, name, true);
|
|
34
35
|
}
|
|
35
36
|
else {
|
|
36
|
-
|
|
37
|
+
this.logger.debug(`enterAction(${name}): Action Name was empty or null! Action will have no effect.`);
|
|
37
38
|
return new NullAction_1.NullAction();
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DynatraceWebRequestTiming = void 0;
|
|
4
4
|
const DynatraceBridge_1 = require("./DynatraceBridge");
|
|
5
|
-
const
|
|
5
|
+
const ConsoleLogger_1 = require("./logging/ConsoleLogger");
|
|
6
6
|
const StringUtils_1 = require("./util/StringUtils");
|
|
7
7
|
class DynatraceWebRequestTiming {
|
|
8
8
|
constructor(requestTag, url) {
|
|
9
9
|
this.requestTag = requestTag;
|
|
10
10
|
this.url = url;
|
|
11
|
+
this.logger = new ConsoleLogger_1.ConsoleLogger('DynatraceWebRequestTiming');
|
|
11
12
|
}
|
|
12
13
|
startWebRequestTiming() {
|
|
13
14
|
if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.requestTag) &&
|
|
14
15
|
!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url)) {
|
|
16
|
+
this.logger.debug(`startWebRequestTiming() - (${this.url}/${this.requestTag})`);
|
|
15
17
|
DynatraceBridge_1.DynatraceNative.startWebRequestTiming(this.requestTag, this.url);
|
|
16
18
|
}
|
|
17
19
|
else {
|
|
18
|
-
|
|
20
|
+
this.logger.debug(`startWebRequestTiming(): Web Request Timing could not be created! - (${this.url}/${this.requestTag})`);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
stopWebRequestTiming(responseCode, responseMessage) {
|
|
@@ -26,12 +28,11 @@ class DynatraceWebRequestTiming {
|
|
|
26
28
|
!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url) &&
|
|
27
29
|
responseCode != null &&
|
|
28
30
|
!StringUtils_1.StringUtils.isStringNullOrUndefined(responseMessage)) {
|
|
31
|
+
this.logger.debug(`stopWebRequestTiming(${responseCode}, ${responseMessage}, ${requestSize}, ${responseSize}) - (${this.url}/${this.requestTag})`);
|
|
29
32
|
DynatraceBridge_1.DynatraceNative.stopWebRequestTimingWithSize(this.requestTag, this.url, responseCode, responseMessage, requestSize, responseSize);
|
|
30
33
|
}
|
|
31
34
|
else {
|
|
32
|
-
|
|
33
|
-
`url: ${this.url} responseCode: ${responseCode} responseMessage: ${responseMessage} ` +
|
|
34
|
-
`requestSize: ${requestSize} responseSize: ${responseSize}`);
|
|
35
|
+
this.logger.debug(`stopWebRequestTiming(${responseCode}, ${responseMessage}, ${requestSize}, ${responseSize}): Web Request Timing could not be stopped! - (${this.url}/${this.requestTag})`);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
getRequestTag() {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports._reportErrorToDynatrace = exports.registerErrorHandler = void 0;
|
|
4
|
-
const
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
5
|
const DynatraceInternal_1 = require("./DynatraceInternal");
|
|
6
6
|
const Dynatrace_1 = require("./Dynatrace");
|
|
7
7
|
const StringUtils_1 = require("./util/StringUtils");
|
|
8
|
-
const
|
|
8
|
+
const ConsoleLogger_1 = require("./logging/ConsoleLogger");
|
|
9
9
|
let _isReportFatalErrorAsCrash = true;
|
|
10
10
|
const _isReactNativeGlobal = (globalScope) => globalScope.ErrorUtils !== undefined;
|
|
11
|
+
const logger = new ConsoleLogger_1.ConsoleLogger('ErrorHandler');
|
|
11
12
|
const registerErrorHandler = (reportFatalErrorAsCrash) => {
|
|
12
13
|
if (global !== undefined && _isReactNativeGlobal(global)) {
|
|
13
14
|
_isReportFatalErrorAsCrash = reportFatalErrorAsCrash;
|
|
@@ -31,15 +32,15 @@ const _reportErrorToDynatrace = (exception, isFatal, oldHandler) => {
|
|
|
31
32
|
isFatal = false;
|
|
32
33
|
}
|
|
33
34
|
DynatraceInternal_1.DynatraceInternal.reportErrorFromHandler(isFatal, String(exception.name), adjustedReason(exception.message), exception.stack != null ? exception.stack : '', _isReportFatalErrorAsCrash);
|
|
34
|
-
|
|
35
|
+
logger.debug(`_reportErrorToDynatrace(${exception}, ${isFatal})`);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
else {
|
|
38
39
|
Dynatrace_1.Dynatrace.reportError(String(exception), -1);
|
|
39
|
-
|
|
40
|
+
logger.debug(`_reportErrorToDynatrace(${exception}, -1)`);
|
|
40
41
|
}
|
|
41
42
|
if (oldHandler !== undefined) {
|
|
42
|
-
if (
|
|
43
|
+
if (react_native_1.Platform.OS === 'ios') {
|
|
43
44
|
setTimeout(() => {
|
|
44
45
|
oldHandler(exception, isFatal);
|
|
45
46
|
}, 200);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Configuration = void 0;
|
|
4
|
-
const LogLevel_1 = require("../
|
|
4
|
+
const LogLevel_1 = require("../logging/LogLevel");
|
|
5
5
|
class Configuration {
|
|
6
6
|
constructor(beaconUrl, applicationId, reportCrash, errorHandler, reportFatalErrorAsCrash, logLevel, lifecycleUpdate, userOptIn, actionNamePrivacy, bundleName, bundleVersion) {
|
|
7
7
|
this.beaconUrl = beaconUrl;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_ACTION_NAME_PRIVACY = exports.DEFAULT_USER_OPT_IN = exports.DEFAULT_LOGLEVEL = exports.DEFAULT_FATAL_AS_CRASH = exports.DEFAULT_ERROR_HANDLER = exports.DEFAULT_REPORT_CRASH = exports.DEFAULT_LIFECYCLE_UPDATE = void 0;
|
|
4
|
-
const LogLevel_1 = require("../model/LogLevel");
|
|
5
4
|
exports.DEFAULT_LIFECYCLE_UPDATE = false;
|
|
6
5
|
exports.DEFAULT_REPORT_CRASH = true;
|
|
7
6
|
exports.DEFAULT_ERROR_HANDLER = true;
|
|
8
7
|
exports.DEFAULT_FATAL_AS_CRASH = true;
|
|
9
|
-
exports.DEFAULT_LOGLEVEL =
|
|
8
|
+
exports.DEFAULT_LOGLEVEL = 1;
|
|
10
9
|
exports.DEFAULT_USER_OPT_IN = false;
|
|
11
10
|
exports.DEFAULT_ACTION_NAME_PRIVACY = false;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConfigurationHandler = void 0;
|
|
4
|
-
const LogLevel_1 = require("../model/LogLevel");
|
|
5
4
|
let _configuration;
|
|
6
5
|
exports.ConfigurationHandler = {
|
|
7
6
|
setConfiguration(configuration) {
|
|
@@ -10,7 +9,8 @@ exports.ConfigurationHandler = {
|
|
|
10
9
|
isConfigurationAvailable: () => _configuration !== undefined,
|
|
11
10
|
isErrorHandlerEnabled: () => _configuration.errorHandler,
|
|
12
11
|
isReportFatalErrorAsCrash: () => _configuration.reportFatalErrorAsCrash,
|
|
13
|
-
isDebugEnabled: () =>
|
|
12
|
+
isDebugEnabled: () => exports.ConfigurationHandler.isConfigurationAvailable() &&
|
|
13
|
+
_configuration.logLevel === 0,
|
|
14
14
|
isLifecycleUpdateEnabled: () => _configuration.lifecycleUpdate,
|
|
15
15
|
isActionNamePrivacyEnabled: () => _configuration.actionNamePrivacy,
|
|
16
16
|
getBundleName: () => _configuration.bundleName,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ManualStartupConfiguration = void 0;
|
|
4
|
-
const LogLevel_1 = require("../
|
|
4
|
+
const LogLevel_1 = require("../logging/LogLevel");
|
|
5
5
|
const ConfigurationDefaults_1 = require("./ConfigurationDefaults");
|
|
6
6
|
const ConfigurationPreset_1 = require("./ConfigurationPreset");
|
|
7
7
|
class ManualStartupConfiguration {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConsoleLogger = void 0;
|
|
4
|
+
const ConfigurationHandler_1 = require("../configuration/ConfigurationHandler");
|
|
5
|
+
class ConsoleLogger {
|
|
6
|
+
constructor(name, logLevel) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
this.level = logLevel;
|
|
9
|
+
}
|
|
10
|
+
debug(msg) {
|
|
11
|
+
if (this.isDebugEnabled()) {
|
|
12
|
+
this.logMessage(msg);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
info(msg) {
|
|
16
|
+
this.logMessage(msg);
|
|
17
|
+
}
|
|
18
|
+
logMessage(msg) {
|
|
19
|
+
console.log(`[${this.name}]: ${msg}`);
|
|
20
|
+
}
|
|
21
|
+
isDebugEnabled() {
|
|
22
|
+
return (this.level === 0 ||
|
|
23
|
+
(ConfigurationHandler_1.ConfigurationHandler.isConfigurationAvailable() &&
|
|
24
|
+
ConfigurationHandler_1.ConfigurationHandler.isDebugEnabled()));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.ConsoleLogger = ConsoleLogger;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogLevelToString = void 0;
|
|
4
|
+
const LogLevelToString = (level) => {
|
|
5
|
+
if (level === 0) {
|
|
6
|
+
return 'Debug';
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return 'Info';
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
exports.LogLevelToString = LogLevelToString;
|
|
@@ -6,7 +6,7 @@ const PathsConstants_1 = require("../scripts/PathsConstants");
|
|
|
6
6
|
const config = require("../scripts/Config");
|
|
7
7
|
const Logger_1 = require("../scripts/Logger");
|
|
8
8
|
const CustomArgumentUtil_1 = require("../scripts/util/CustomArgumentUtil");
|
|
9
|
-
const instrumentor = require("
|
|
9
|
+
const instrumentor = require("../instrumentation/DynatraceInstrumentation");
|
|
10
10
|
const customArguments = (0, CustomArgumentUtil_1.readCustomArguments)();
|
|
11
11
|
const transform = (src, filename, options) => {
|
|
12
12
|
if (typeof src === 'object') {
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Dynatrace = void 0;
|
|
4
|
+
const DynatraceBridge_1 = require("../core/DynatraceBridge");
|
|
5
|
+
const ConsoleLogger_1 = require("../core/logging/ConsoleLogger");
|
|
6
|
+
const EventCreator_1 = require("./events/EventCreator");
|
|
7
|
+
const EventPipeline_1 = require("./events/EventPipeline");
|
|
8
|
+
const EventTimestamp_1 = require("./events/EventTimestamp");
|
|
9
|
+
const EventModifierUtil_1 = require("./events/modifier/EventModifierUtil");
|
|
10
|
+
const SendEventValidation_1 = require("./events/modifier/SendEventValidation");
|
|
11
|
+
const TimestampProvider_1 = require("./provider/TimestampProvider");
|
|
12
|
+
class DynatraceImpl {
|
|
13
|
+
constructor(timestampProvider) {
|
|
14
|
+
this.timestampProvider = timestampProvider;
|
|
15
|
+
this.logger = new ConsoleLogger_1.ConsoleLogger('Dynatrace');
|
|
16
|
+
}
|
|
17
|
+
addEventModifier(eventModifier) {
|
|
18
|
+
this.logger.debug('addEventModifier()');
|
|
19
|
+
return EventPipeline_1.EventPipeline.addEventModifier(eventModifier);
|
|
20
|
+
}
|
|
21
|
+
removeEventModifier(eventModifier) {
|
|
22
|
+
this.logger.debug('removeEventModifier()');
|
|
23
|
+
return EventPipeline_1.EventPipeline.removeEventModifier(eventModifier);
|
|
24
|
+
}
|
|
25
|
+
startView(name) {
|
|
26
|
+
this.logger.debug(`startView(${name})`);
|
|
27
|
+
EventPipeline_1.EventPipeline.generateViewData(name);
|
|
28
|
+
if (name != null && name.length > 0) {
|
|
29
|
+
DynatraceBridge_1.DynatraceNative.startView(name);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.logger.debug(`startView(${name}): Name can't be used. Either empty or null!`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
stopView() {
|
|
36
|
+
this.logger.debug('stopView()');
|
|
37
|
+
EventPipeline_1.EventPipeline.releaseViewData();
|
|
38
|
+
DynatraceBridge_1.DynatraceNative.stopView();
|
|
39
|
+
}
|
|
40
|
+
reportCrash(crash, isApiReported, isFatal = true) {
|
|
41
|
+
this.logger.debug(`reportCrash(${JSON.stringify(crash)}, ${isFatal})`);
|
|
42
|
+
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
43
|
+
const event = Object.assign(Object.assign({}, (0, EventCreator_1.createCrashEvent)(crash.name, crash.message, crash.stack, isFatal)), eventTimestamp.getEventTimeInfo());
|
|
44
|
+
if (isApiReported) {
|
|
45
|
+
event["characteristics.is_api_reported"] =
|
|
46
|
+
true;
|
|
47
|
+
}
|
|
48
|
+
EventPipeline_1.EventPipeline.insertEvent(event);
|
|
49
|
+
}
|
|
50
|
+
reportErrorCode(errorName, errorCode, isApiReported) {
|
|
51
|
+
this.logger.debug(`reportErrorCode(${errorName}, ${errorCode})`);
|
|
52
|
+
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
53
|
+
const event = Object.assign(Object.assign({}, (0, EventCreator_1.createErrorCodeEvent)(errorName, errorCode)), eventTimestamp.getEventTimeInfo());
|
|
54
|
+
if (isApiReported) {
|
|
55
|
+
event["characteristics.is_api_reported"] =
|
|
56
|
+
true;
|
|
57
|
+
}
|
|
58
|
+
EventPipeline_1.EventPipeline.insertEvent(event);
|
|
59
|
+
}
|
|
60
|
+
reportError(error, isApiReported) {
|
|
61
|
+
this.logger.debug(`reportError(${JSON.stringify(error)})`);
|
|
62
|
+
const eventTimestamp = new EventTimestamp_1.EventTimestamp(this.timestampProvider);
|
|
63
|
+
const event = Object.assign(Object.assign({}, (0, EventCreator_1.createErrorEvent)(error.name, error.message, error.stack)), eventTimestamp.getEventTimeInfo());
|
|
64
|
+
if (isApiReported) {
|
|
65
|
+
event["characteristics.is_api_reported"] =
|
|
66
|
+
true;
|
|
67
|
+
}
|
|
68
|
+
EventPipeline_1.EventPipeline.insertEvent(event);
|
|
69
|
+
}
|
|
70
|
+
sendEvent(properties, context) {
|
|
71
|
+
this.logger.debug(`sendEvent(${JSON.stringify(properties, context)})`);
|
|
72
|
+
const eventValidated = SendEventValidation_1.SendEventValidation.modifyEvent(properties);
|
|
73
|
+
if (eventValidated != null && (0, EventModifierUtil_1.containEventProperties)(eventValidated)) {
|
|
74
|
+
eventValidated["characteristics.has_event_properties"] = true;
|
|
75
|
+
}
|
|
76
|
+
EventPipeline_1.EventPipeline.insertEvent(eventValidated, context);
|
|
77
|
+
}
|
|
78
|
+
sendSessionPropertyEvent(properties) {
|
|
79
|
+
this.logger.debug(`sendSessionPropertyEvent(${JSON.stringify(properties)})`);
|
|
80
|
+
const eventValidated = SendEventValidation_1.SendSessionPropertyEventValidation.modifyEvent(properties);
|
|
81
|
+
if (eventValidated != null &&
|
|
82
|
+
(0, EventModifierUtil_1.containSessionProperties)(eventValidated)) {
|
|
83
|
+
eventValidated["characteristics.has_session_properties"] = true;
|
|
84
|
+
}
|
|
85
|
+
EventPipeline_1.EventPipeline.insertEvent(eventValidated);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.Dynatrace = new DynatraceImpl(TimestampProvider_1.defaultTimestampProvider);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynatraceSecondGenForwarder = void 0;
|
|
4
|
+
const Dynatrace_1 = require("./Dynatrace");
|
|
5
|
+
class DynatraceSecondGenForwarderImpl {
|
|
6
|
+
reportError(errorName, errorCode) {
|
|
7
|
+
Dynatrace_1.Dynatrace.reportErrorCode(errorName, errorCode, true);
|
|
8
|
+
}
|
|
9
|
+
reportErrorWithStacktrace(errorName, reason, stacktrace) {
|
|
10
|
+
Dynatrace_1.Dynatrace.reportError({
|
|
11
|
+
name: errorName,
|
|
12
|
+
message: reason,
|
|
13
|
+
stack: stacktrace,
|
|
14
|
+
}, true);
|
|
15
|
+
}
|
|
16
|
+
reportErrorStacktrace(errorName, errorValue, reason, stacktrace) {
|
|
17
|
+
Dynatrace_1.Dynatrace.reportError({
|
|
18
|
+
name: errorName,
|
|
19
|
+
message: reason,
|
|
20
|
+
stack: stacktrace,
|
|
21
|
+
}, true);
|
|
22
|
+
}
|
|
23
|
+
reportCrash(crashName, reason, stacktrace) {
|
|
24
|
+
Dynatrace_1.Dynatrace.reportCrash({
|
|
25
|
+
name: crashName,
|
|
26
|
+
message: reason,
|
|
27
|
+
stack: stacktrace,
|
|
28
|
+
}, true, false);
|
|
29
|
+
}
|
|
30
|
+
reportCrashWithException(crashName, crash) {
|
|
31
|
+
const copyCrash = Object.assign(Object.assign({}, crash), { name: crashName });
|
|
32
|
+
Dynatrace_1.Dynatrace.reportCrash(copyCrash, true, false);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.DynatraceSecondGenForwarder = new DynatraceSecondGenForwarderImpl();
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AppStartObserver = void 0;
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
|
+
const EventCreator_1 = require("../events/EventCreator");
|
|
6
|
+
const ConsoleLogger_1 = require("../../core/logging/ConsoleLogger");
|
|
7
|
+
const DynatraceBridge_1 = require("../../core/DynatraceBridge");
|
|
8
|
+
const EventPipeline_1 = require("../events/EventPipeline");
|
|
9
|
+
class AppStartObserverImpl {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.EMIT_APP_START = 'dynatraceAppStartMeasurements';
|
|
12
|
+
this.logger = new ConsoleLogger_1.ConsoleLogger('AppStartObserver');
|
|
13
|
+
this.setupNativeEventEmitter();
|
|
14
|
+
}
|
|
15
|
+
call() {
|
|
16
|
+
}
|
|
17
|
+
setupNativeEventEmitter() {
|
|
18
|
+
if (react_native_1.Platform.OS === 'android' ||
|
|
19
|
+
Object.keys(DynatraceBridge_1.DynatraceNative).length !== 0) {
|
|
20
|
+
const emitter = new react_native_1.NativeEventEmitter(DynatraceBridge_1.DynatraceNative);
|
|
21
|
+
emitter.addListener(this.EMIT_APP_START, (data) => {
|
|
22
|
+
this.logger.debug(`emitter(${JSON.stringify(data)}})`);
|
|
23
|
+
const appStartEvent = (0, EventCreator_1.createAppStartEvent)(data);
|
|
24
|
+
if (appStartEvent != null) {
|
|
25
|
+
EventPipeline_1.EventPipeline.insertEvent(Object.assign({}, appStartEvent), {});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.logger.debug(`emitter(${JSON.stringify(data)}}): App Start event ignored!`);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.AppStartObserver = new AppStartObserverImpl();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AppStartTypeKeyMapping = exports.AppStartType = void 0;
|
|
4
|
+
var AppStartType;
|
|
5
|
+
(function (AppStartType) {
|
|
6
|
+
AppStartType["DOWNLOAD_START"] = "downloadStart";
|
|
7
|
+
AppStartType["DOWNLOAD_END"] = "downloadEnd";
|
|
8
|
+
AppStartType["RUN_JS_BUNDLE_START"] = "runJsBundleStart";
|
|
9
|
+
AppStartType["RUN_JS_BUNDLE_END"] = "runJsBundleEnd";
|
|
10
|
+
AppStartType["CONTENT_APPEARED"] = "contentAppeared";
|
|
11
|
+
AppStartType["RELOAD"] = "reload";
|
|
12
|
+
})(AppStartType = exports.AppStartType || (exports.AppStartType = {}));
|
|
13
|
+
exports.AppStartTypeKeyMapping = [
|
|
14
|
+
{
|
|
15
|
+
type: AppStartType.RELOAD,
|
|
16
|
+
key: "app_start.react_native.application.reload",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: AppStartType.DOWNLOAD_START,
|
|
20
|
+
key: "app_start.react_native.application.download_start",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: AppStartType.RUN_JS_BUNDLE_START,
|
|
24
|
+
key: "app_start.react_native.application.run_js_bundle_start",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: AppStartType.DOWNLOAD_END,
|
|
28
|
+
key: "app_start.react_native.application.download_end",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: AppStartType.RUN_JS_BUNDLE_END,
|
|
32
|
+
key: "app_start.react_native.application.run_js_bundle_end",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: AppStartType.CONTENT_APPEARED,
|
|
36
|
+
key: "app_start.react_native.application.content_appeared",
|
|
37
|
+
},
|
|
38
|
+
];
|