@embrace-io/react-native
Version:
A React Native wrapper for the Embrace SDK
111 lines (110 loc) • 5 kB
JavaScript
;
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",
};