UNPKG

@dynatrace/react-native-plugin

Version:

This plugin gives you the ability to use the Dynatrace Mobile agent in your react native application.

1 lines 11.3 kB
"use strict";var a,n=require("@babel/runtime/helpers/interopRequireDefault"),r=n(require("@babel/runtime/helpers/toConsumableArray")),l=(Object.defineProperty(exports,"t",{value:!0}),exports.instrument=void 0,require("path")),o=require("jscodeshift"),i=require("jscodeshift/src/Collection"),e=require("../scripts/FileOperationHelper"),c=require("../scripts/PathsConstants"),f=require("../lib/core/util/GetValuesFromPackage"),t=require("../scripts/util/InstrumentUtil"),u=require("./libs/react-native/Touchables.InstrInfo"),s=require("./libs/react-native/RefreshControl.InstrInfo"),d=require("./libs/react-native/Switch.InstrInfo"),v=require("./libs/community/gesture-handler/Touchables.InstrInfo"),p=require("./libs/community/Picker.InstrInfo"),m=require("./parser/Babel"),g=require("./model/Types"),y=(!function(n){n[n.i=-1]="Filtered",n[n.u=0]="Normal",n[n.o=1]="ReactNative",n[n.l=2]="React"}(a=a||{}),[]),b=(y.push.apply(y,(0,r.default)(u.instrumentationInfo)),y.push.apply(y,(0,r.default)(s.instrumentationInfo)),y.push.apply(y,(0,r.default)(d.instrumentationInfo)),y.push.apply(y,(0,r.default)(v.instrumentationInfo)),y.push.apply(y,(0,r.default)(p.instrumentationInfo)),["AppRegistry","renderApplication","setUpErrorHandling"]),q="@dynatrace/react-native-plugin/instrumentation/libs",instrument=function(n,r,e){r=V(r);var t,i=G(r);if(i!==a.i){var u=!1,o=I(r,n);if(i===a.l)T(o),u=!0;else if(i===a.o)r.endsWith("AppRegistry.js")?void 0!==e&&e.autoStart&&(k(o),u=!0):r.endsWith("renderApplication.js")?(A(o),u=!0):r.endsWith("setUpErrorHandling.js")&&void 0!==e&&e.autoStart&&e.errorHandler.enabled&&(J(o,e.autoStart,e.errorHandler.reportFatalErrorAsCrash),u=!0);else{var i=w(r,e);if(e.custom.reactnavigation&&P(r,o))u=!0;else{if(!i.input&&!i.lifecycle)return null!=e&&e.debug&&console.log("Dynatrace - Filtered All: ".concat(r)),E(r),n;i.lifecycle&&A(o)&&(u=!0),i.input&&y.forEach(function(n){n=W(o,n);o=n.root,u=u||n.v})}}u?(n=o.toSource({quote:"single"}),H(n,r)):E(r),null!=e&&e.debug&&u&&console.log("Dynatrace - Modified Filename: "+r)}else r.includes(l.join("@dynatrace","react-native-plugin"))&&r.endsWith(l.join("lib","core","configuration","ConfigurationPreset.js"))&&void 0!==e&&(i=(0,f.getHostAppBundleInfo)(c.default.getPackageJsonFile()),t=I(r,n),void 0!==e.lifecycle&&N(t,"getLifecycleUpdate",e.lifecycle.includeUpdate),void 0!==e.debug&&N(t,"getLogLevel",e.debug?0:1),void 0!==e.bundleName?N(t,"getBundleName",e.bundleName):null!==i&&N(t,"getBundleName",null==i?void 0:i.name),void 0!==e.bundleVersion?N(t,"getBundleVersion",e.bundleVersion):null!==i&&N(t,"getBundleVersion",null==i?void 0:i.version),void 0!==e.input&&void 0!==e.input.actionNamePrivacy&&N(t,"getActionNamePrivacy",e.input.actionNamePrivacy),void 0!==e.errorHandler&&(N(t,"isErrorHandlerEnabled",e.errorHandler.enabled),N(t,"isReportFatalErrorAsCrash",e.errorHandler.reportFatalErrorAsCrash)),e.autoStart&&N(t,"isAutoStartupEnabled",e.autoStart),n=t.toSource({quote:"single"}),H(n,r));return n},P=(exports.instrument=instrument,function(n,r){return!!O(n,r)&&(n="import { registerListener } from '".concat(q,"/react-navigation/ReactNavigation';"),r.find(o.ImportDeclaration).at(0).insertBefore(n),!0)}),O=function(n,r){var e=!1;return n.includes("react-navigation")&&n.includes("NavigationContainer.tsx")&&r.find(o.VariableDeclarator).forEach(function(n){e||null==n.value||null==n.value.id||"refContainer"!==n.value.id.name||null!=n.parent&&null!=n.parent.value&&null!=n.parent.value.type&&"VariableDeclaration"===n.parent.value.type&&(n.parent.insertAfter("registerListener(refContainer);"),e=!0)}),e},A=function(n){var r=n.findJSXElements(),t=!1;return 0<r.length&&(n.find(o.FunctionDeclaration).forEach(function(n){var r,e=(0,i.fromPaths)([n]);0<e.findJSXElements().length&&null!=n&&null!=n.value&&null!=n.value.id&&n.value.id.name&&(r=e.find(o.ClassDeclaration),e=e.find(o.ClassExpression),0===r.length)&&0===e.length&&(h(n,g.Types.FunctionalComponent,n.value.id.name),t=!0)}),n.find(o.ClassDeclaration).forEach(function(n){0<(0,i.fromPaths)([n]).findJSXElements().length&&null!=n&&null!=n.value&&n.value.id&&n.value.id.name&&(h(n,g.Types.ClassComponent,n.value.id.name),t=!0)}),n.find(o.ArrowFunctionExpression).forEach(function(n){0<(0,i.fromPaths)([n]).findJSXElements().length&&null!=n.parent&&null!=n.parent.value&&null!=n.parent.value.id&&null!=n.parent.value.id.name&&(h(n,g.Types.FunctionalComponent,n.parent.value.id.name),t=!0)})),t},h=function(n,r,e){for(r=o.expressionStatement(o.assignmentExpression("=",o.memberExpression(o.identifier(e),o.identifier("_dtInfo")),U(r,e)));void 0!==n.parentPath&&"body"!==n.parentPath.name;)n=n.parentPath;void 0!==n.parentPath&&n.insertAfter(r)},U=function(n,r){return o.objectExpression([o.objectProperty(o.identifier("type"),o.numericLiteral(n)),o.objectProperty(o.identifier("name"),o.stringLiteral(r))])},N=function(n,r,e){var n=n.find(o.Identifier).filter(function(n){return n.node.name===r});1===n.length&&"ReturnStatement"===(n=n.paths()[0].parent.value.body.body[0]).type&&("boolean"==typeof e&&(n.argument=o.booleanLiteral(e)),"string"==typeof e&&(n.argument=o.stringLiteral(e)),"number"==typeof e)&&(n.argument=o.numericLiteral(e))},I=function(n,r){return o.withParser((0,m.babelParser)(l.extname(n)))(r)},V=function(n){return l.isAbsolute(n)?n.replace(c.default.getApplicationPath()+l.sep,""):n},E=function(n){try{var r=l.join(c.default.getBuildPath(),n+t.INSTRUMENTED_FILE_EXTENSION);e.default.checkIfFileExistsSync(r),e.default.deleteFileSync(r)}catch(n){}},H=function(n,r){r=l.join(c.default.getBuildPath(),r);try{e.default.checkIfFileExistsSync(l.dirname(r))}catch(n){e.default.createDirectorySync(l.dirname(r))}e.default.writeTextToFileSync(r+t.INSTRUMENTED_FILE_EXTENSION,n)},w=function(n,r){var e={input:!1,lifecycle:!1};return void 0!==r&&(void 0!==r.lifecycle&&void 0!==r.lifecycle.instrument&&r.lifecycle.instrument(n)&&(e.lifecycle=!0),void 0!==r.input)&&void 0!==r.input.instrument&&r.input.instrument(n)&&(e.input=!0),e},T=function(n){var r,n=n.find(o.Program);1===n.length&&(r=o.expressionStatement(o.callExpression(o.memberExpression(o.callExpression(o.identifier("require"),[o.stringLiteral("@dynatrace/react-native-plugin/instrumentation/jsx/ElementHelper")]),o.identifier("instrumentCreateElement")),[o.memberExpression(o.identifier("module"),o.identifier("exports"))])),n.paths()[0].node.body.push(r))},k=function(n){var r=M(n,"runApplication",!0);1===r.length&&(un(n,{p:"_DynatraceApplicationHandler",module:"@dynatrace/react-native-plugin",reference:"ApplicationHandler"}),j(r.paths()[0].parent.value.body.body,0,_("_DynatraceApplicationHandler","startup",[])))},J=function(n,r,e){n=n.paths()[0].value.program.body;null!=n&&(j(n,n.length,L({p:"_DynatraceErrorHandler",module:"@dynatrace/react-native-plugin/lib/core/ErrorHandler",reference:""})),j(n,n.length,_("_DynatraceErrorHandler","registerErrorHandler",[o.literal(e)])))},j=function(n,r){for(var e=arguments.length,t=new Array(2<e?e-2:0),i=2;i<e;i++)t[i-2]=arguments[i];return n.splice.apply(n,[r,0].concat(t))},M=function(n,r,t){for(var e=arguments.length,i=new Array(3<e?e-3:0),u=3;u<e;u++)i[u-3]=arguments[u];return n.find(o.Identifier).filter(function(n){return n.node.name===r}).filter(function(n){return void 0!==n.parent&&void 0!==n.parent.value&&void 0!==n.parent.value.params}).filter(function(n){var r=void 0!==n.parent&&void 0!==n.parent.value;t||(r=r&&n.parent.value.params.length===i.length);for(var e=0;e<0;e++)r=r&&n.parent.value.params[e].name===i[e];return r})},G=function(n){if(n.includes("@dynatrace"))return a.i;var r=l.extname(n);if(".js"!==r&&".ts"!==r&&".tsx"!==r&&".jsx"!==r)return a.i;for(var e=l.parse(n),t=e.dir.split(l.sep),i=0;i<t.length;i++)if("node_modules"===t[i]){if("react-native"===t[i+1]||"create-react-class"===t[i+1]||"react-clone-referenced-element"===t[i+1])return b.includes(e.name)?a.o:a.i;if("react"===t[i+1]&&"index"===e.name)return a.l}return a.u},z=function(n,r,e){var t=K(n,r,e);return Q(n,r,e)||t},K=function(n,r,e){var t=X(n,r);return 0<t.length&&(void 0!==(t=R(t,r.reference,!1))&&(e.p=t.localName),en(n,e),!0)},Q=function(n,r,e){var t=x(n,r.module);if(1===t.length){t=R(t,r.reference,!0);if(void 0!==t)return tn(n,e.defaultImport,t.localName,"ImportNamespaceSpecifier"===t.type),!0}return!1},W=function(n,r){var e=JSON.parse(JSON.stringify(r.new));return{root:n,v:z(n,r.old,e)||Y(n,r.old,r.new.defaultImport)}},X=function(n,r){return n.find(o.ImportDeclaration).filter(function(n){return n.node.source.value===r.module&&null!=n.node.specifiers&&n.node.specifiers.some(function(n){return C(n)&&n.imported.name===r.reference||n.local&&n.local.name===r.reference})})},C=function(n){return void 0!==n.imported},Y=function(n,r,e){var t=!1;return n.find(o.CallExpression).filter(function(n){return Z(n.node.callee)&&$(n.node.arguments[0])&&n.node.arguments[0].value===r.module&&void 0!==n.parent}).forEach(function(n){(void 0===n.parent.value.property||void 0!==n.parent.value.property&&void 0!==n.parent.value.property.name&&n.parent.value.property.name===r.reference)&&(n.node.arguments[0].value=e,t=t||!0)}),t},Z=function(n){return"require"===n.name},$=function(n){return"StringLiteral"===n.type||"Literal"===n.type},x=function(n,r){return n.find(o.ImportDeclaration).filter(function(n){return n.node.source.value===r})},R=function(n,e,t){var i;return n.forEach(function(n){void 0!==n.node.specifiers&&(n.node.specifiers=n.node.specifiers.filter(function(n){var r;return C(n)&&!t?((r=n.imported.name!==e)||null==n.local||n.imported.name===n.local.name||(i={localName:n.local.name,type:n.type}),r):!(!C(n)&&t&&(null!=n.local&&(i={localName:n.local.name,type:n.type}),1))}),0===n.node.specifiers.length)&&n.prune()}),i},nn=function(n,r){n.find(o.ImportDeclaration).filter(function(n){return n.node.source.value===r.module}).forEach(function(n){null!=n.node.specifiers&&n.node.specifiers.push(B(r))})},rn=function(n,r,e){n.find(o.ImportDeclaration).filter(function(n){return n.node.source.value===r}).forEach(function(n){null!=n.node.specifiers&&n.node.specifiers.push(e)})},D=function(n,r,e){var t=n.find(o.ImportDeclaration);0<t.length?o(t.paths()[0]).insertAfter(F(r,e)):1===(t=n.find(o.Program)).length&&t.paths()[0].node.body.unshift(F(r,e))},en=function(n,r){0<x(n,r.module).length?nn(n,r):D(n,r.module,[B(r)])},tn=function(n,r,e,t){var i=x(n,r),t=(t?sn:fn)(e);0<i.length?rn(n,r,t):D(n,r,[t])},un=function(n,r){n=n.find(o.VariableDeclaration);0<n.length&&o(n.paths()[0]).insertAfter(L(r))},_=function(n,r,e){return o.expressionStatement(on(n,r,e))},on=function(n,r,e){return o.callExpression(cn(n,r),e)},L=function(n){return o.variableDeclaration("var",[an(n)])},an=function(n){return o.variableDeclarator(void 0!==n.p?o.identifier(n.p):o.identifier(n.reference),(0<n.reference.length?ln:S)(n))},ln=function(n){return o.memberExpression(S(n),o.identifier(n.reference))},cn=function(n,r){return o.memberExpression(o.identifier(n),o.identifier(r))},S=function(n){return o.callExpression(o.identifier("require"),[o.literal(n.module)])},F=function(n,r){return o.importDeclaration(r,o.literal(n))},B=function(n){return void 0!==n.p?o.importSpecifier(o.identifier(n.reference),o.identifier(n.p)):o.importSpecifier(o.identifier(n.reference))},fn=function(n){return o.importDefaultSpecifier(o.identifier(n))},sn=function(n){return o.importNamespaceSpecifier(o.identifier(n))};