UNPKG

@embrace-io/react-native

Version:
123 lines (122 loc) 6.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.patchMainApplication = exports.createEmbraceJSON = exports.patchAppBuildGradle = exports.androidEmbraceLegacySwazzlerApply = exports.androidEmbraceLegacySwazzlerRE = exports.androidEmbraceGradlePluginApply = exports.androidEmbraceGradlePluginApplyRE = exports.patchBuildGradle = exports.androidEmbraceGradlePluginDependency = exports.androidEmbraceLegacySwazzler = exports.androidEmbraceGradlePluginDependencyRE = void 0; const file_1 = require("../util/file"); const android_1 = require("../util/android"); const EmbraceLogger_1 = require("../../src/utils/EmbraceLogger"); const patch_1 = require("./patches/patch"); const common_1 = require("./common"); const path = require("path"); const fs = require("fs"); const logger = new EmbraceLogger_1.default(console); const androidToolsBuildGradleRE = /(\s+)classpath(\(|\s)("|')com\.android\.tools\.build:gradle(?::\d+(?:\.\d+)*)?("|')\)/; exports.androidEmbraceGradlePluginDependencyRE = /[ \t]*classpath(\(|\s)('|")io\.embrace:embrace-gradle-plugin:.*('|")\)?\n?/; exports.androidEmbraceLegacySwazzler = /[ \t]*classpath(\(|\s)('|")io\.embrace:embrace-swazzler:.*('|")\)?\n?/; exports.androidEmbraceGradlePluginDependency = "classpath \"io.embrace:embrace-gradle-plugin:${findProject(':embrace-io_react-native').properties['emb_android_sdk']}\""; exports.patchBuildGradle = { name: "patch build.gradle", run: (_wizard) => { return (0, android_1.buildGradlePatchable)().then(file => { if (file.hasLine(androidToolsBuildGradleRE)) { if (file.hasLine(exports.androidEmbraceLegacySwazzler)) { file.deleteLine(exports.androidEmbraceLegacySwazzler); } if (file.hasLine(exports.androidEmbraceGradlePluginDependencyRE)) { logger.warn("Already has Embrace Gradle plugin"); } else { logger.log("Patching build.gradle file"); file.addAfter(androidToolsBuildGradleRE, exports.androidEmbraceGradlePluginDependency); } file.patch(); return; } logger.warn("Can't find file with com.android.tools.build:gradle"); return; }); }, docURL: "https://embrace.io/docs/react-native/integration/add-embrace-sdk/?platform=android#manually", }; const androidPlugin = /apply plugin: ("|')com.android.application("|')/; exports.androidEmbraceGradlePluginApplyRE = /apply plugin: ('|")io\.embrace\.gradle('|")/; exports.androidEmbraceGradlePluginApply = "apply plugin: 'io.embrace.gradle'"; // Legacy apply line from before the rename. The id is no longer valid, so remove it on (re)install. exports.androidEmbraceLegacySwazzlerRE = /[ \t]*apply plugin: ('|")embrace-swazzler('|")\n?/; exports.androidEmbraceLegacySwazzlerApply = "apply plugin: 'embrace-swazzler'"; exports.patchAppBuildGradle = { name: "patch app/build.gradle", run: (_wizard) => { return (0, android_1.buildAppGradlePatchable)().then(file => { if (file.hasLine(androidPlugin)) { if (file.hasLine(exports.androidEmbraceLegacySwazzlerRE)) { file.deleteLine(exports.androidEmbraceLegacySwazzlerRE); } if (file.hasLine(exports.androidEmbraceGradlePluginApplyRE)) { logger.warn("Already has Embrace Gradle plugin"); } else { logger.log("Patching app/build.gradle file"); file.addAfter(androidPlugin, "\n" + exports.androidEmbraceGradlePluginApply); } file.patch(); return; } logger.warn('Can\'t find line: apply plugin: "com.android.application"'); return; }); }, docURL: "https://embrace.io/docs/react-native/integration/add-embrace-sdk/?platform=android#manually", }; exports.createEmbraceJSON = { name: "create Embrace JSON file", run: (wizard) => { return new Promise((resolve) => { const p = path.join("android", "app", "src", "main", "embrace-config.json"); try { fs.closeSync(fs.openSync(p, "ax")); return resolve((0, android_1.embraceJSON)()); } catch (e) { if (e instanceof Error && e.message.includes("EEXIST")) { logger.log("Already has embrace-config.json file"); return resolve(file_1.NoopFile); } else { throw e; } } }).then((file) => { if (file === file_1.NoopFile) { return; } return wizard .fieldValueList([common_1.androidAppID, common_1.apiToken]) .then(list => { const [id, token] = list; file.contents = (0, android_1.embraceJSONContents)({ appID: id, apiToken: token }); return file.patch(); }) .then(() => { logger.log("Adding embrace-config.json file in android/app/src/main"); }); }); }, docURL: "https://embrace.io/docs/react-native/integration/add-embrace-sdk/?platform=android#manually", }; const tryToPatchMainApplication = () => { // In the future there will be more apps with kotlin than java so I start looking up by kotlin const response = (0, patch_1.default)("kotlin"); if (!response) { return (0, patch_1.default)("java"); } return response; }; exports.patchMainApplication = { name: "patch MainApplication file", run: (wizard) => { return wizard.fieldValue(common_1.packageJSON).then(() => { return tryToPatchMainApplication(); }); }, docURL: "https://embrace.io/docs/react-native/integration/session-reporting/#import-embrace", };