UNPKG

@embrace-io/react-native

Version:
111 lines (110 loc) 5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.patchMainApplication = exports.createEmbraceJSON = exports.patchAppBuildGradle = exports.androidEmbraceSwazzlerPlugin = exports.androidEmbraceSwazzlerPluginRE = exports.patchBuildGradle = exports.androidGenericVersion = exports.androidEmbraceSwazzler = 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.androidEmbraceSwazzler = /classpath(\(|\s)('|")io\.embrace:embrace-swazzler:.*('|")\)?/; exports.androidGenericVersion = "classpath \"io.embrace:embrace-swazzler:${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.androidEmbraceSwazzler)) { file.deleteLine(exports.androidEmbraceSwazzler); } logger.log("Patching build.gradle file"); file.addAfter(androidToolsBuildGradleRE, exports.androidGenericVersion); 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.androidEmbraceSwazzlerPluginRE = /apply plugin: ('|")embrace-swazzler('|")/; exports.androidEmbraceSwazzlerPlugin = "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.androidEmbraceSwazzlerPluginRE)) { logger.warn("already has Embrace Swazzler plugin"); } else { logger.log("patching app/build.gradle file"); file.addAfter(androidPlugin, "\n" + exports.androidEmbraceSwazzlerPlugin); } 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", };