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