@dynatrace/react-native-plugin 2.225.0 → 2.231.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -6
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/dynatrace/android/agent/DynatraceRNBridge.java +10 -0
- package/files/plugin.gradle +1 -1
- package/ios/DynatraceRNBridge.m +11 -0
- package/ios/lib/Dynatrace.xcframework/Info.plist +69 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_armv7/Dynatrace.framework/Dynatrace +0 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_armv7/Dynatrace.framework/Headers/Dynatrace.h +952 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_armv7/Dynatrace.framework/Headers/Framework.h +18 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_armv7/Dynatrace.framework/Info.plist +0 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_armv7/Dynatrace.framework/Modules/module.modulemap +6 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/Dynatrace +0 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/Headers/Dynatrace.h +952 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/Headers/Framework.h +18 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/Info.plist +0 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/Modules/module.modulemap +6 -0
- package/ios/lib/Dynatrace.xcframework/ios-arm64_i386_x86_64-simulator/Dynatrace.framework/_CodeSignature/CodeResources +147 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64/Dynatrace.framework/Dynatrace +0 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64/Dynatrace.framework/Headers/Dynatrace.h +952 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64/Dynatrace.framework/Headers/Framework.h +18 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64/Dynatrace.framework/Info.plist +0 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64/Dynatrace.framework/Modules/module.modulemap +6 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/Dynatrace +0 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/Headers/Dynatrace.h +952 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/Headers/Framework.h +18 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/Info.plist +0 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/Modules/module.modulemap +6 -0
- package/ios/lib/Dynatrace.xcframework/tvos-arm64_x86_64-simulator/Dynatrace.framework/_CodeSignature/CodeResources +135 -0
- package/lib/community/Picker.js +33 -0
- package/lib/dynatrace-reporter.js +30 -0
- package/lib/dynatrace-transformer.js +50 -0
- package/lib/instrumentor/base/Application.js +17 -0
- package/lib/instrumentor/base/Dynatrace.js +275 -0
- package/lib/instrumentor/base/DynatraceAction.js +66 -0
- package/lib/instrumentor/base/DynatraceBridge.js +5 -0
- package/lib/instrumentor/base/ElementHelper.js +58 -0
- package/lib/instrumentor/base/ErrorHandler.js +52 -0
- package/lib/instrumentor/base/Logger.js +15 -0
- package/lib/instrumentor/base/NullAction.js +27 -0
- package/lib/instrumentor/base/Picker.js +32 -0
- package/lib/instrumentor/base/RefreshControl.js +35 -0
- package/lib/instrumentor/base/Touchable.js +103 -0
- package/lib/instrumentor/base/UserPrivacyOptions.js +22 -0
- package/lib/instrumentor/base/configuration/AutoStartupConfiguration.js +17 -0
- package/lib/instrumentor/base/configuration/Configuration.js +26 -0
- package/lib/instrumentor/base/configuration/ConfigurationDefaults.js +13 -0
- package/lib/instrumentor/base/configuration/ManualStartupConfiguration.js +34 -0
- package/lib/instrumentor/base/interface/IAutoConfiguration.js +2 -0
- package/lib/instrumentor/base/interface/IDynatrace.js +2 -0
- package/lib/instrumentor/base/interface/IDynatraceAction.js +2 -0
- package/lib/instrumentor/base/interface/IDynatraceBridge.js +2 -0
- package/lib/instrumentor/base/interface/IDynatraceProperties.js +2 -0
- package/lib/instrumentor/base/interface/ILogger.js +2 -0
- package/lib/instrumentor/base/model/DataCollectionLevel.js +11 -0
- package/lib/instrumentor/base/model/LogLevel.js +8 -0
- package/lib/instrumentor/base/model/Platform.js +9 -0
- package/lib/instrumentor/base/util/StringUtils.js +8 -0
- package/lib/instrumentor/dynatrace-instrumentation.js +1 -0
- package/lib/instrumentor/model/reference.js +2 -0
- package/lib/instrumentor/model/types.js +16 -0
- package/lib/instrumentor/parser/babel.js +63 -0
- package/lib/jsx-runtime.js +41 -0
- package/lib/metro/getSourceMapInfo.js +22 -0
- package/lib/react/Component.js +68 -0
- package/lib/react-native/RefreshControl.js +14 -0
- package/lib/react-native/Touchables.js +63 -0
- package/lib/react-native/index.js +12 -0
- package/lib/react-native.js +25 -0
- package/package.json +155 -1
- package/scripts/android.js +123 -0
- package/scripts/api/CustomArguments.js +2 -0
- package/scripts/api/CustomArgumentsBuilder.js +2 -0
- package/scripts/api/model/Platform.js +8 -0
- package/scripts/config.js +73 -0
- package/scripts/core/CustomArgumentsBuilderImpl.js +22 -0
- package/scripts/core/CustomArgumentsImpl.js +33 -0
- package/scripts/core/InstrumentCall.js +89 -0
- package/scripts/fileOperationHelper.js +184 -0
- package/scripts/install.js +47 -0
- package/scripts/instrument.js +7 -0
- package/scripts/ios.js +179 -0
- package/scripts/logger.js +79 -0
- package/scripts/pathsConstants.js +60 -0
- package/scripts/start.js +6 -0
- package/scripts/uninstall.js +80 -0
- package/scripts/util/CustomArgumentUtil.js +57 -0
- package/scripts/util/SourceMapUtil.js +30 -0
- package/scripts/util/StartUtil.js +9 -0
- package/scripts/util/instrumentUtil.js +28 -0
- package/typings/react-native-dynatrace.d.ts +6 -0
- package/util/constants.js +0 -4
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsxs = exports.jsx = void 0;
|
|
4
|
+
const _jsxRuntime = require('react/jsx-runtime.js');
|
|
5
|
+
const ElementHelper_1 = require("./instrumentor/base/ElementHelper");
|
|
6
|
+
const types_1 = require("./instrumentor/model/types");
|
|
7
|
+
const Component_1 = require("./react/Component");
|
|
8
|
+
exports.jsx = __DEV__ ? jsxDev : jsxProd;
|
|
9
|
+
exports.jsxs = __DEV__ ? jsxsDev : jsxProd;
|
|
10
|
+
function jsxProd(type, config, maybeKey) {
|
|
11
|
+
return jsxHelper(_jsxRuntime.jsx, type, config, [maybeKey]);
|
|
12
|
+
}
|
|
13
|
+
function jsxDev(type, config, maybeKey, source, self) {
|
|
14
|
+
return jsxHelper(_jsxRuntime.jsx, type, config, [maybeKey, source, self]);
|
|
15
|
+
}
|
|
16
|
+
function jsxsDev(type, config, maybeKey, source, self) {
|
|
17
|
+
return jsxHelper(_jsxRuntime.jsxs, type, config, [maybeKey, source, self]);
|
|
18
|
+
}
|
|
19
|
+
function jsxHelper(jsxFn, type, config, args) {
|
|
20
|
+
if (type && type._dtInfo && !ElementHelper_1.isDtActionIgnore(config)) {
|
|
21
|
+
if (type._dtInfo.type === types_1.Types.FunctionalComponent) {
|
|
22
|
+
let wrapperProps = { children: [] };
|
|
23
|
+
wrapperProps.dtActionName = config && config.dtActionName ? config.dtActionName : type._dtInfo.name;
|
|
24
|
+
wrapperProps.children.push(jsxFn(type, config, ...args));
|
|
25
|
+
return _jsxRuntime.jsxs(Component_1.DynatraceFnWrapper, wrapperProps);
|
|
26
|
+
}
|
|
27
|
+
else if (type._dtInfo.type === types_1.Types.ClassComponent &&
|
|
28
|
+
type.prototype != undefined && type.prototype.isReactComponent != undefined) {
|
|
29
|
+
let wrapperProps = { children: [] };
|
|
30
|
+
wrapperProps.children.push(jsxFn(type, config, ...args));
|
|
31
|
+
return _jsxRuntime.jsxs(Component_1.DynatraceClassWrapper, wrapperProps);
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(config.children)) {
|
|
34
|
+
ElementHelper_1.modifyElement(type, config, ...config.children);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
ElementHelper_1.modifyElement(type, config, config.children);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return jsxFn(type, config, ...args);
|
|
41
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const pathsConstants = require('@dynatrace/react-native-plugin/scripts/pathsConstants')
|
|
3
|
+
.default;
|
|
4
|
+
const fileOperation = require('@dynatrace/react-native-plugin/scripts/fileOperationHelper')
|
|
5
|
+
.default;
|
|
6
|
+
const originalSourceMapInfo = require('./getSourceMapInfoOrig');
|
|
7
|
+
const pathNode = require('path');
|
|
8
|
+
function getSourceMapInfo(module, options) {
|
|
9
|
+
const dataOrig = originalSourceMapInfo(module, options);
|
|
10
|
+
try {
|
|
11
|
+
if (!options.excludeSource) {
|
|
12
|
+
const correctPath = module.path.replace(pathsConstants.getApplicationPath(), '') + '.dtx';
|
|
13
|
+
dataOrig.source = fileOperation.readTextFromFileSync(pathNode.join(pathsConstants.getBuildPath(), correctPath));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
return dataOrig;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
module.exports = getSourceMapInfo;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynatraceClassWrapper = exports.DynatraceFnWrapper = void 0;
|
|
4
|
+
const Dynatrace_1 = require("../instrumentor/base/Dynatrace");
|
|
5
|
+
const React = require("react");
|
|
6
|
+
const Configuration_1 = require("../instrumentor/base/configuration/Configuration");
|
|
7
|
+
function DynatraceFnWrapper(props) {
|
|
8
|
+
const action = Dynatrace_1.Dynatrace.enterAction('Render ' + getNameFromComponent(props));
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
action.leaveAction();
|
|
11
|
+
});
|
|
12
|
+
return props.children;
|
|
13
|
+
}
|
|
14
|
+
exports.DynatraceFnWrapper = DynatraceFnWrapper;
|
|
15
|
+
class DynatraceClassWrapper extends React.Component {
|
|
16
|
+
constructor(props) {
|
|
17
|
+
super(props);
|
|
18
|
+
this.wrappingName = getNameFromComponent(props);
|
|
19
|
+
this.componentMounted = false;
|
|
20
|
+
}
|
|
21
|
+
render() {
|
|
22
|
+
if ((this.componentMounted && Configuration_1.Configuration.isLifecycleUpdateEnabled()) ||
|
|
23
|
+
!this.componentMounted) {
|
|
24
|
+
const actionPrefix = !this.componentMounted ? 'Render ' : 'Update ';
|
|
25
|
+
this.internalAction = Dynatrace_1.Dynatrace.enterAction(actionPrefix + this.wrappingName);
|
|
26
|
+
}
|
|
27
|
+
return this.props.children;
|
|
28
|
+
}
|
|
29
|
+
componentWillUnmount() {
|
|
30
|
+
this.componentMounted = false;
|
|
31
|
+
}
|
|
32
|
+
componentDidUpdate() {
|
|
33
|
+
this.reportFunctionEvent("componentDidUpdate()");
|
|
34
|
+
}
|
|
35
|
+
componentDidMount() {
|
|
36
|
+
this.componentMounted = true;
|
|
37
|
+
this.reportFunctionEvent("componentDidMount()");
|
|
38
|
+
}
|
|
39
|
+
reportFunctionEvent(event) {
|
|
40
|
+
if (this.internalAction !== undefined) {
|
|
41
|
+
this.internalAction.reportEvent(`${this.wrappingName}.${event}`);
|
|
42
|
+
this.internalAction.leaveAction();
|
|
43
|
+
this.internalAction = undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.DynatraceClassWrapper = DynatraceClassWrapper;
|
|
48
|
+
function getNameFromComponent(props) {
|
|
49
|
+
if (props !== undefined && props.children !== undefined
|
|
50
|
+
&& props.children.type !== undefined) {
|
|
51
|
+
if (props.children.props !== undefined &&
|
|
52
|
+
props.children.props.dtActionName !== undefined) {
|
|
53
|
+
return props.children.props.dtActionName;
|
|
54
|
+
}
|
|
55
|
+
else if (props.children.type.displayName !== undefined) {
|
|
56
|
+
return props.children.type.displayName;
|
|
57
|
+
}
|
|
58
|
+
else if (props.children.type._dtInfo !== undefined) {
|
|
59
|
+
return props.children.type._dtInfo.name;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return props.children.type.name;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return "Undefined Name";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RefreshControl = void 0;
|
|
4
|
+
const Dynatrace_1 = require("../instrumentor/base/Dynatrace");
|
|
5
|
+
const Logger_1 = require("../instrumentor/base/Logger");
|
|
6
|
+
const RefreshControl_1 = require("../instrumentor/base/RefreshControl");
|
|
7
|
+
const ReactNative = require("react-native");
|
|
8
|
+
class RefreshControl extends ReactNative.RefreshControl {
|
|
9
|
+
constructor(props, context) {
|
|
10
|
+
super(props, context);
|
|
11
|
+
RefreshControl_1.RefreshControlHelper(Dynatrace_1.Dynatrace, Logger_1.Logger).attachToRender(this);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.RefreshControl = RefreshControl;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Pressable = exports.Text = exports.TouchableWithoutFeedback = exports.TouchableNativeFeedback = exports.TouchableHighlight = exports.TouchableOpacity = exports.Button = void 0;
|
|
5
|
+
const types_1 = require("../instrumentor/model/types");
|
|
6
|
+
const ReactNative = require("react-native");
|
|
7
|
+
if (typeof ReactNative.Button === 'object') {
|
|
8
|
+
exports.Button = Object.assign({ _dtInfo: { type: types_1.Types.Button } }, ReactNative.Button);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
exports.Button = (_a = class Button extends ReactNative.Button {
|
|
12
|
+
},
|
|
13
|
+
_a._dtInfo = { type: types_1.Types.Button },
|
|
14
|
+
_a);
|
|
15
|
+
}
|
|
16
|
+
if (typeof ReactNative.TouchableOpacity === 'object') {
|
|
17
|
+
exports.TouchableOpacity = Object.assign({ _dtInfo: { type: types_1.Types.TouchableOpacity } }, ReactNative.TouchableOpacity);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
exports.TouchableOpacity = (_b = class TouchableOpacity extends (ReactNative.TouchableOpacity) {
|
|
21
|
+
},
|
|
22
|
+
_b._dtInfo = { type: types_1.Types.TouchableOpacity },
|
|
23
|
+
_b);
|
|
24
|
+
}
|
|
25
|
+
if (typeof ReactNative.TouchableHighlight === 'object') {
|
|
26
|
+
exports.TouchableHighlight = Object.assign({ _dtInfo: { type: types_1.Types.TouchableHighlight } }, ReactNative.TouchableHighlight);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
exports.TouchableHighlight = (_c = class TouchableHighlight extends (ReactNative.TouchableHighlight) {
|
|
30
|
+
},
|
|
31
|
+
_c._dtInfo = { type: types_1.Types.TouchableHighlight },
|
|
32
|
+
_c);
|
|
33
|
+
}
|
|
34
|
+
if (typeof ReactNative.TouchableNativeFeedback === 'object') {
|
|
35
|
+
exports.TouchableNativeFeedback = Object.assign({ _dtInfo: { type: types_1.Types.TouchableNativeFeedback } }, ReactNative.TouchableNativeFeedback);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
exports.TouchableNativeFeedback = (_d = class TouchableNativeFeedback extends (ReactNative.TouchableNativeFeedback) {
|
|
39
|
+
},
|
|
40
|
+
_d._dtInfo = { type: types_1.Types.TouchableNativeFeedback },
|
|
41
|
+
_d);
|
|
42
|
+
}
|
|
43
|
+
if (typeof ReactNative.TouchableWithoutFeedback === 'object') {
|
|
44
|
+
exports.TouchableWithoutFeedback = Object.assign({ _dtInfo: { type: types_1.Types.TouchableWithoutFeedback } }, ReactNative.TouchableWithoutFeedback);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
exports.TouchableWithoutFeedback = (_e = class TouchableWithoutFeedback extends (ReactNative.TouchableWithoutFeedback) {
|
|
48
|
+
},
|
|
49
|
+
_e._dtInfo = { type: types_1.Types.TouchableWithoutFeedback },
|
|
50
|
+
_e);
|
|
51
|
+
}
|
|
52
|
+
if (typeof ReactNative.Text === 'object') {
|
|
53
|
+
exports.Text = Object.assign({ _dtInfo: { type: types_1.Types.Text } }, ReactNative.Text);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
exports.Text = (_f = class Text extends ReactNative.Text {
|
|
57
|
+
},
|
|
58
|
+
_f._dtInfo = { type: types_1.Types.Text },
|
|
59
|
+
_f);
|
|
60
|
+
}
|
|
61
|
+
if (typeof ReactNative.Pressable === 'object') {
|
|
62
|
+
exports.Pressable = Object.assign({ _dtInfo: { type: types_1.Types.Pressable } }, ReactNative.Pressable);
|
|
63
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var RefreshControl_1 = require("./RefreshControl");
|
|
4
|
+
Object.defineProperty(exports, "RefreshControl", { enumerable: true, get: function () { return RefreshControl_1.RefreshControl; } });
|
|
5
|
+
var Touchables_1 = require("./Touchables");
|
|
6
|
+
Object.defineProperty(exports, "TouchableHighlight", { enumerable: true, get: function () { return Touchables_1.TouchableHighlight; } });
|
|
7
|
+
Object.defineProperty(exports, "TouchableNativeFeedback", { enumerable: true, get: function () { return Touchables_1.TouchableNativeFeedback; } });
|
|
8
|
+
Object.defineProperty(exports, "TouchableOpacity", { enumerable: true, get: function () { return Touchables_1.TouchableOpacity; } });
|
|
9
|
+
Object.defineProperty(exports, "TouchableWithoutFeedback", { enumerable: true, get: function () { return Touchables_1.TouchableWithoutFeedback; } });
|
|
10
|
+
Object.defineProperty(exports, "Button", { enumerable: true, get: function () { return Touchables_1.Button; } });
|
|
11
|
+
Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return Touchables_1.Text; } });
|
|
12
|
+
Object.defineProperty(exports, "Pressable", { enumerable: true, get: function () { return Touchables_1.Pressable; } });
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("proxy-polyfill");
|
|
4
|
+
const Touchables_1 = require("./react-native/Touchables");
|
|
5
|
+
const RefreshControl_1 = require("./react-native/RefreshControl");
|
|
6
|
+
const reactNative = require("react-native");
|
|
7
|
+
const dynatraceInstrument = {
|
|
8
|
+
TouchableHighlight: Touchables_1.TouchableHighlight,
|
|
9
|
+
TouchableNativeFeedback: Touchables_1.TouchableNativeFeedback,
|
|
10
|
+
TouchableOpacity: Touchables_1.TouchableOpacity,
|
|
11
|
+
TouchableWithoutFeedback: Touchables_1.TouchableWithoutFeedback,
|
|
12
|
+
Button: Touchables_1.Button,
|
|
13
|
+
RefreshControl: RefreshControl_1.RefreshControl,
|
|
14
|
+
Text: Touchables_1.Text,
|
|
15
|
+
Pressable: Touchables_1.Pressable,
|
|
16
|
+
};
|
|
17
|
+
const dynatraceProxy = new Proxy(reactNative, {
|
|
18
|
+
get(target, property) {
|
|
19
|
+
if (dynatraceInstrument[property] !== undefined) {
|
|
20
|
+
return dynatraceInstrument[property];
|
|
21
|
+
}
|
|
22
|
+
return target[property];
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
module.exports = dynatraceProxy;
|
package/package.json
CHANGED
|
@@ -1 +1,155 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "@dynatrace/react-native-plugin",
|
|
3
|
+
"version": "2.231.0",
|
|
4
|
+
"description": "This plugin gives you the ability to use the Dynatrace Mobile agent in your react native application.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "typings/react-native-dynatrace.d.ts",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"react-native",
|
|
9
|
+
"dynatrace",
|
|
10
|
+
"mobile",
|
|
11
|
+
"android",
|
|
12
|
+
"ios",
|
|
13
|
+
"performance",
|
|
14
|
+
"monitoring"
|
|
15
|
+
],
|
|
16
|
+
"rnpm": {
|
|
17
|
+
"plugin": "./command/command.js"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"install": "if-env BUILD_PLUGIN=true && echo 'Skipping Install Script' || node ./scripts/install.js",
|
|
21
|
+
"uninstall": "node ./scripts/uninstall.js",
|
|
22
|
+
"test": "jest --runInBand",
|
|
23
|
+
"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand",
|
|
24
|
+
"tsc": "tsc",
|
|
25
|
+
"lint": "eslint . --ext .ts"
|
|
26
|
+
},
|
|
27
|
+
"jest": {
|
|
28
|
+
"preset": "react-native",
|
|
29
|
+
"moduleDirectories": [
|
|
30
|
+
"node_modules"
|
|
31
|
+
],
|
|
32
|
+
"unmockedModulePathPatterns": [
|
|
33
|
+
"node_modules"
|
|
34
|
+
],
|
|
35
|
+
"modulePathIgnorePatterns": [
|
|
36
|
+
"<rootDir>/src",
|
|
37
|
+
"<rootDir>/tests/appium/",
|
|
38
|
+
"<rootDir>/tests/commandTestTmp",
|
|
39
|
+
"node_modules/react-native/local-cli"
|
|
40
|
+
],
|
|
41
|
+
"transform": {
|
|
42
|
+
"^.+\\.(ts|tsx)$": "ts-jest"
|
|
43
|
+
},
|
|
44
|
+
"testPathIgnorePatterns": [
|
|
45
|
+
"<rootDir>/src",
|
|
46
|
+
"<rootDir>/tests/commandTestTmp"
|
|
47
|
+
],
|
|
48
|
+
"transformIgnorePatterns": [
|
|
49
|
+
"node_modules/(?!(@react-native|react-native)/)"
|
|
50
|
+
],
|
|
51
|
+
"setupFiles": [
|
|
52
|
+
"<rootDir>/tests/setup/setup.js"
|
|
53
|
+
],
|
|
54
|
+
"testResultsProcessor": "jest-junit"
|
|
55
|
+
},
|
|
56
|
+
"jest-junit": {
|
|
57
|
+
"suiteName": "jest tests",
|
|
58
|
+
"outputDirectory": ".",
|
|
59
|
+
"outputName": "junit.xml",
|
|
60
|
+
"uniqueOutputName": "true",
|
|
61
|
+
"ancestorSeparator": " › ",
|
|
62
|
+
"usePathForSuiteName": "true"
|
|
63
|
+
},
|
|
64
|
+
"author": "Dynatrace",
|
|
65
|
+
"license": "Copyright (c) 2012-2020 Dynatrace LLC. All rights reserved.",
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@babel/runtime": "^7.16.3",
|
|
68
|
+
"if-env": "1.0.4",
|
|
69
|
+
"jscodeshift": "^0.13.0",
|
|
70
|
+
"plist": "^3.0.4",
|
|
71
|
+
"proxy-polyfill": "^0.3.2",
|
|
72
|
+
"semver": "^7.3.5"
|
|
73
|
+
},
|
|
74
|
+
"homepage": "https://www.dynatrace.com/",
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"react-native": ">=0.59.0",
|
|
77
|
+
"react": ">=16.8.0",
|
|
78
|
+
"@babel/parser": ">=7.4.4",
|
|
79
|
+
"@react-native-community/picker": ">=1.0.0"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@babel/cli": "^7.7.4",
|
|
83
|
+
"@babel/plugin-proposal-class-properties": "^7.8.3",
|
|
84
|
+
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
|
|
85
|
+
"@babel/plugin-proposal-optional-chaining": "^7.8.3",
|
|
86
|
+
"@babel/plugin-transform-flow-strip-types": "^7.8.3",
|
|
87
|
+
"@babel/plugin-transform-runtime": "^7.12.1",
|
|
88
|
+
"@babel/preset-env": "^7.4.4",
|
|
89
|
+
"@babel/preset-react": "^7.8.3",
|
|
90
|
+
"@testing-library/react-native": "^7.0.2",
|
|
91
|
+
"@types/jest": "^24.0.23",
|
|
92
|
+
"@types/jscodeshift": "^0.7.0",
|
|
93
|
+
"@types/libxmljs": "^0.18.3",
|
|
94
|
+
"@types/node": "^12.7.9",
|
|
95
|
+
"@types/plist": "^3.0.2",
|
|
96
|
+
"@types/react-native": "^0.63.32",
|
|
97
|
+
"@types/semver": "^6.0.2",
|
|
98
|
+
"@types/shelljs": "^0.8.8",
|
|
99
|
+
"@types/uglify-js": "^3.9.3",
|
|
100
|
+
"@typescript-eslint/eslint-plugin": "^4.22.1",
|
|
101
|
+
"@typescript-eslint/parser": "^4.22.1",
|
|
102
|
+
"appium": "^1.21.0",
|
|
103
|
+
"compressing": "^1.5.1",
|
|
104
|
+
"eslint": "^7.25.0",
|
|
105
|
+
"eslint-config-prettier": "^8.3.0",
|
|
106
|
+
"eslint-plugin-prettier": "^3.4.0",
|
|
107
|
+
"jest": "^25.2.3",
|
|
108
|
+
"jest-each": "^25.2.3",
|
|
109
|
+
"jest-junit": "^12.0.0",
|
|
110
|
+
"npm-check-updates": "^12.0.2",
|
|
111
|
+
"prettier": "^2.2.1",
|
|
112
|
+
"shelljs": "^0.8.3",
|
|
113
|
+
"ts-jest": "^26.3.0",
|
|
114
|
+
"typescript": "^3.8.2",
|
|
115
|
+
"uglify-js": "^3.6.0",
|
|
116
|
+
"wd": "^1.13.0",
|
|
117
|
+
"react-native": "0.57.8",
|
|
118
|
+
"react": "16.8.3",
|
|
119
|
+
"react-test-renderer": "16.8.3"
|
|
120
|
+
},
|
|
121
|
+
"files": [
|
|
122
|
+
"command/command.js",
|
|
123
|
+
"command/util/*",
|
|
124
|
+
"command/interface/*",
|
|
125
|
+
"android/build.gradle",
|
|
126
|
+
"android/src/main/**/*",
|
|
127
|
+
"ios/**/*",
|
|
128
|
+
"files/*",
|
|
129
|
+
"lib/instrumentor/base/*.js",
|
|
130
|
+
"lib/instrumentor/base/model/*.js",
|
|
131
|
+
"lib/instrumentor/base/configuration/*.js",
|
|
132
|
+
"lib/instrumentor/base/interface/*.js",
|
|
133
|
+
"lib/instrumentor/base/util/*.js",
|
|
134
|
+
"lib/instrumentor/model/*.js",
|
|
135
|
+
"lib/instrumentor/parser/*.js",
|
|
136
|
+
"lib/instrumentor/dynatrace-instrumentation.js",
|
|
137
|
+
"lib/*.js",
|
|
138
|
+
"lib/community/*.js",
|
|
139
|
+
"lib/react-native/*.js",
|
|
140
|
+
"lib/react/*.js",
|
|
141
|
+
"lib/metro/*.js",
|
|
142
|
+
"react-native.config.js",
|
|
143
|
+
"react-native-dynatrace.js",
|
|
144
|
+
"react-native-dynatrace.podspec",
|
|
145
|
+
"README.md",
|
|
146
|
+
"scripts/*",
|
|
147
|
+
"scripts/api/*",
|
|
148
|
+
"scripts/core/*",
|
|
149
|
+
"scripts/api/model/*",
|
|
150
|
+
"scripts/util/*",
|
|
151
|
+
"util/*.js",
|
|
152
|
+
"typings/*",
|
|
153
|
+
"package.json"
|
|
154
|
+
]
|
|
155
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.writeGradleConfig = exports.instrumentAndroidPlatform = exports.GRADLE_APPLY_BUILDSCRIPT = exports.GRADLE_DYNATRACE_FILE = void 0;
|
|
5
|
+
const logger_1 = require("./logger");
|
|
6
|
+
const fileOperationHelper_1 = require("./fileOperationHelper");
|
|
7
|
+
const pathsConstants_1 = require("./pathsConstants");
|
|
8
|
+
const GRADLE_CONFIG_IDENTIFIER = "// AUTO - INSERTED";
|
|
9
|
+
exports.GRADLE_DYNATRACE_FILE = "apply from: \"../node_modules/@dynatrace/react-native-plugin/files/dynatrace.gradle\"";
|
|
10
|
+
const GRADLE_BUILDSCRIPT_IDENTIFIER = "buildscript";
|
|
11
|
+
exports.GRADLE_APPLY_BUILDSCRIPT = "apply from: \"../node_modules/@dynatrace/react-native-plugin/files/plugin.gradle\", to: buildscript";
|
|
12
|
+
function instrumentAndroidPlatform(pathToGradle, remove) {
|
|
13
|
+
let path = fileOperationHelper_1.default.checkIfFileExistsSync(pathToGradle);
|
|
14
|
+
if (!path.endsWith(".gradle")) {
|
|
15
|
+
throw new Error("Can't find .gradle file. gradle path must also include the gradle file!");
|
|
16
|
+
}
|
|
17
|
+
changeReactNativeBuildGradleFile(path, remove);
|
|
18
|
+
}
|
|
19
|
+
exports.instrumentAndroidPlatform = instrumentAndroidPlatform;
|
|
20
|
+
function removeOldDynatraceClasspath(gradleFileContent) {
|
|
21
|
+
let gradleFileContentLines = gradleFileContent.split("\n");
|
|
22
|
+
for (let i = 0; i < gradleFileContentLines.length; i++) {
|
|
23
|
+
if (gradleFileContentLines[i].indexOf("com.dynatrace.tools") > -1) {
|
|
24
|
+
gradleFileContentLines.splice(i, 1);
|
|
25
|
+
logger_1.default.logMessageSync("Removed old Dynatrace classpath from build.gradle", logger_1.default.INFO);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return gradleFileContentLines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
function changeReactNativeBuildGradleFile(pathToGradle, remove) {
|
|
32
|
+
let gradleFileContent = fileOperationHelper_1.default.readTextFromFileSync(pathToGradle);
|
|
33
|
+
let modifiedFileContent = removeOldDynatraceClasspath(gradleFileContent);
|
|
34
|
+
let gradleFileContentLines = modifiedFileContent.split("\n");
|
|
35
|
+
let gradlePluginFileIndex = -1;
|
|
36
|
+
let gradleDynatraceFileIndex = -1;
|
|
37
|
+
for (let i = 0; i < gradleFileContentLines.length && (gradleDynatraceFileIndex === -1 || gradlePluginFileIndex === -1); i++) {
|
|
38
|
+
if (gradleFileContentLines[i].indexOf("plugin.gradle") > -1) {
|
|
39
|
+
gradlePluginFileIndex = i;
|
|
40
|
+
}
|
|
41
|
+
else if (gradleFileContentLines[i].indexOf("dynatrace.gradle") > -1) {
|
|
42
|
+
gradleDynatraceFileIndex = i;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let modified = false;
|
|
46
|
+
if (remove) {
|
|
47
|
+
if (gradlePluginFileIndex !== -1) {
|
|
48
|
+
gradleFileContentLines.splice(gradlePluginFileIndex, 1);
|
|
49
|
+
modified = true;
|
|
50
|
+
}
|
|
51
|
+
if (gradleDynatraceFileIndex !== -1) {
|
|
52
|
+
gradleFileContentLines.splice(gradleDynatraceFileIndex - (modified ? 1 : 0), 1);
|
|
53
|
+
modified = true;
|
|
54
|
+
}
|
|
55
|
+
if (modified) {
|
|
56
|
+
logger_1.default.logMessageSync("Removed Dynatrace modifications from build.gradle: " + pathToGradle, logger_1.default.INFO);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
if (gradlePluginFileIndex === -1) {
|
|
61
|
+
let gradleFileReactIndex = -1;
|
|
62
|
+
for (let i = 0; i < gradleFileContentLines.length; i++) {
|
|
63
|
+
if (gradleFileContentLines[i].startsWith(GRADLE_BUILDSCRIPT_IDENTIFIER)) {
|
|
64
|
+
gradleFileReactIndex = i;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (gradleFileReactIndex === -1) {
|
|
69
|
+
throw new Error("Could not find Buildscript block in build.gradle.");
|
|
70
|
+
}
|
|
71
|
+
gradleFileContentLines.splice(gradleFileReactIndex + 1, 0, exports.GRADLE_APPLY_BUILDSCRIPT);
|
|
72
|
+
modified = true;
|
|
73
|
+
}
|
|
74
|
+
if (gradleDynatraceFileIndex === -1) {
|
|
75
|
+
gradleFileContentLines.splice(gradleFileContentLines.length, 0, exports.GRADLE_DYNATRACE_FILE);
|
|
76
|
+
modified = true;
|
|
77
|
+
}
|
|
78
|
+
if (modified) {
|
|
79
|
+
logger_1.default.logMessageSync("Added Dynatrace plugin.gradle to the build.gradle: " + pathToGradle, logger_1.default.INFO);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
logger_1.default.logMessageSync("Dynatrace plugin & agent already added to build.gradle", logger_1.default.INFO);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (modified) {
|
|
86
|
+
let fullGradleFile = gradleFileContentLines.join("\n");
|
|
87
|
+
fileOperationHelper_1.default.writeTextToFileSync(pathToGradle, fullGradleFile);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function writeGradleConfig(androidConfig) {
|
|
91
|
+
if (androidConfig === undefined || androidConfig.config === undefined) {
|
|
92
|
+
logger_1.default.logMessageSync("Can't write configuration of Android agent because it is missing!", logger_1.default.WARNING);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let gradleFileContent = fileOperationHelper_1.default.readTextFromFileSync(pathsConstants_1.default.getDynatraceGradleFile());
|
|
96
|
+
let gradleFileContentLines = removeOldGradleConfig(gradleFileContent);
|
|
97
|
+
let gradleFileIndex = -1;
|
|
98
|
+
for (let i = 0; i < gradleFileContentLines.length; i++) {
|
|
99
|
+
if (gradleFileContentLines[i].indexOf(GRADLE_CONFIG_IDENTIFIER) > -1) {
|
|
100
|
+
gradleFileIndex = i;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
gradleFileContentLines.splice(gradleFileIndex + 1, 0, androidConfig.config);
|
|
105
|
+
let fullGradleFile = gradleFileContentLines.join("\n");
|
|
106
|
+
fileOperationHelper_1.default.writeTextToFileSync(pathsConstants_1.default.getDynatraceGradleFile(), fullGradleFile);
|
|
107
|
+
logger_1.default.logMessageSync("Replaced old configuration with current configuration in dynatrace.gradle", logger_1.default.INFO);
|
|
108
|
+
}
|
|
109
|
+
exports.writeGradleConfig = writeGradleConfig;
|
|
110
|
+
function removeOldGradleConfig(gradleFileContent) {
|
|
111
|
+
let gradleFileContentLines = gradleFileContent.split("\n");
|
|
112
|
+
var gradleConfigIndex = [];
|
|
113
|
+
for (let i = 0; i < gradleFileContentLines.length && gradleConfigIndex.length < 2; i++) {
|
|
114
|
+
if (gradleFileContentLines[i].indexOf(GRADLE_CONFIG_IDENTIFIER) > -1) {
|
|
115
|
+
gradleConfigIndex.push(i);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (gradleConfigIndex.length != 2) {
|
|
119
|
+
throw new Error("Could not find identfier in internal gradle file. Please re-install.");
|
|
120
|
+
}
|
|
121
|
+
gradleFileContentLines.splice(gradleConfigIndex[0] + 1, gradleConfigIndex[1] - (gradleConfigIndex[0] + 1));
|
|
122
|
+
return gradleFileContentLines;
|
|
123
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Platform = void 0;
|
|
4
|
+
var Platform;
|
|
5
|
+
(function (Platform) {
|
|
6
|
+
Platform["Android"] = "android";
|
|
7
|
+
Platform["iOS"] = "ios";
|
|
8
|
+
})(Platform = exports.Platform || (exports.Platform = {}));
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.checkConfiguration = exports.readConfig = exports.defaultConfig = exports.ERROR_CONFIG_NOT_AVAILABLE = void 0;
|
|
14
|
+
const fileOperationHelper_1 = require("./fileOperationHelper");
|
|
15
|
+
const logger_1 = require("./logger");
|
|
16
|
+
const pathsConstants_1 = require("./pathsConstants");
|
|
17
|
+
exports.ERROR_CONFIG_NOT_AVAILABLE = "-1";
|
|
18
|
+
exports.defaultConfig = {
|
|
19
|
+
react: {
|
|
20
|
+
autoStart: true,
|
|
21
|
+
debug: false,
|
|
22
|
+
lifecycle: {
|
|
23
|
+
includeUpdate: false,
|
|
24
|
+
instrument: (filename) => false
|
|
25
|
+
},
|
|
26
|
+
input: {
|
|
27
|
+
instrument: (filename) => true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
function readConfig(pathToConfig) {
|
|
32
|
+
let readConfig;
|
|
33
|
+
patchMalformedConfiguration(pathToConfig);
|
|
34
|
+
readConfig = require(pathToConfig);
|
|
35
|
+
if (readConfig === undefined) {
|
|
36
|
+
throw new Error(exports.ERROR_CONFIG_NOT_AVAILABLE);
|
|
37
|
+
}
|
|
38
|
+
return addDefaultConfigs(readConfig);
|
|
39
|
+
}
|
|
40
|
+
exports.readConfig = readConfig;
|
|
41
|
+
function addDefaultConfigs(config) {
|
|
42
|
+
let duplicateDefaultConfigReact = Object.assign({}, exports.defaultConfig.react);
|
|
43
|
+
duplicateDefaultConfigReact = Object.assign(duplicateDefaultConfigReact, config.react);
|
|
44
|
+
duplicateDefaultConfigReact.lifecycle = Object.assign(duplicateDefaultConfigReact.lifecycle, config.react.lifecycle);
|
|
45
|
+
duplicateDefaultConfigReact.input = Object.assign(duplicateDefaultConfigReact.input, config.react.input);
|
|
46
|
+
config.react = duplicateDefaultConfigReact;
|
|
47
|
+
return config;
|
|
48
|
+
}
|
|
49
|
+
function checkConfiguration() {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
let pathToDynatraceConfig = pathsConstants_1.default.getConfigFilePath();
|
|
52
|
+
try {
|
|
53
|
+
yield fileOperationHelper_1.default.checkIfFileExists(pathToDynatraceConfig);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
yield createNewConfiguration(pathToDynatraceConfig);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exports.checkConfiguration = checkConfiguration;
|
|
61
|
+
function createNewConfiguration(pathToDynatraceConfig) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
let defaultConfigContent = yield fileOperationHelper_1.default.readTextFromFile(pathsConstants_1.default.getDefaultConfig());
|
|
64
|
+
yield fileOperationHelper_1.default.writeTextToFile(pathToDynatraceConfig, defaultConfigContent);
|
|
65
|
+
logger_1.default.logMessageSync("Created dynatrace.config.js - Please insert your configuration and update the file!", logger_1.default.INFO);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function patchMalformedConfiguration(pathToDynatraceConfig) {
|
|
69
|
+
let configContent = fileOperationHelper_1.default.readTextFromFileSync(pathToDynatraceConfig);
|
|
70
|
+
if (configContent.indexOf("\u200B") != -1) {
|
|
71
|
+
fileOperationHelper_1.default.writeTextToFileSync(pathToDynatraceConfig, configContent.split("\u200B").join(""));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomArgumentsBuilderImpl = void 0;
|
|
4
|
+
const CustomArgumentsImpl_1 = require("./CustomArgumentsImpl");
|
|
5
|
+
class CustomArgumentsBuilderImpl {
|
|
6
|
+
withConfigurationArgument(configurationPath) {
|
|
7
|
+
this.configurationPath = configurationPath;
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
withGradleArgument(gradlePath) {
|
|
11
|
+
this.gradlePath = gradlePath;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
withPlistArgument(plistPath) {
|
|
15
|
+
this.plistPath = plistPath;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
build() {
|
|
19
|
+
return new CustomArgumentsImpl_1.CustomArgumentsImpl(this.configurationPath, this.gradlePath, this.plistPath);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.CustomArgumentsBuilderImpl = CustomArgumentsBuilderImpl;
|