UNPKG

react-klasha

Version:

This is an reactJS library for implementing klasha payment gateway

181 lines (180 loc) 8.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.doctorAndroid = void 0; const tslib_1 = require("tslib"); const utils_fs_1 = require("@ionic/utils-fs"); const fs_1 = require("fs"); const path_1 = require("path"); const colors_1 = tslib_1.__importDefault(require("../colors")); const common_1 = require("../common"); const errors_1 = require("../errors"); const log_1 = require("../log"); const xml_1 = require("../util/xml"); async function doctorAndroid(config) { var _a; try { await common_1.check([ checkAndroidInstalled, () => checkGradlew(config), () => checkAppSrcDirs(config), ]); log_1.logSuccess('Android looking great! 👌'); } catch (e) { if (!errors_1.isFatal(e)) { errors_1.fatal((_a = e.stack) !== null && _a !== void 0 ? _a : e); } throw e; } } exports.doctorAndroid = doctorAndroid; async function checkAppSrcDirs(config) { if (!(await utils_fs_1.pathExists(config.android.appDirAbs))) { return `${colors_1.default.strong(config.android.appDir)} directory is missing in ${colors_1.default.strong(config.android.platformDir)}`; } if (!(await utils_fs_1.pathExists(config.android.srcMainDirAbs))) { return `${colors_1.default.strong(config.android.srcMainDir)} directory is missing in ${colors_1.default.strong(config.android.platformDir)}`; } if (!(await utils_fs_1.pathExists(config.android.assetsDirAbs))) { return `${colors_1.default.strong(config.android.assetsDir)} directory is missing in ${colors_1.default.strong(config.android.platformDir)}`; } if (!(await utils_fs_1.pathExists(config.android.webDirAbs))) { return `${colors_1.default.strong(config.android.webDir)} directory is missing in ${colors_1.default.strong(config.android.platformDir)}`; } const appSrcMainAssetsWwwIndexHtmlDir = path_1.join(config.android.webDirAbs, 'index.html'); if (!(await utils_fs_1.pathExists(appSrcMainAssetsWwwIndexHtmlDir))) { return `${colors_1.default.strong('index.html')} file is missing in ${colors_1.default.strong(config.android.webDirAbs)}`; } return checkAndroidManifestFile(config); } async function checkAndroidManifestFile(config) { const manifestFileName = 'AndroidManifest.xml'; const manifestFilePath = path_1.join(config.android.srcMainDirAbs, manifestFileName); if (!(await utils_fs_1.pathExists(manifestFilePath))) { return `${colors_1.default.strong(manifestFileName)} is missing in ${colors_1.default.strong(config.android.srcMainDir)}`; } try { const xmlData = await xml_1.readXML(manifestFilePath); return checkAndroidManifestData(config, xmlData); } catch (e) { return e; } } async function checkAndroidManifestData(config, xmlData) { const manifestNode = xmlData.manifest; if (!manifestNode) { return `Missing ${colors_1.default.input('<manifest>')} XML node in ${colors_1.default.strong(config.android.srcMainDir)}`; } const packageId = manifestNode.$['package']; if (!packageId) { return `Missing ${colors_1.default.input('<manifest package="">')} attribute in ${colors_1.default.strong(config.android.srcMainDir)}`; } const applicationChildNodes = manifestNode.application; if (!Array.isArray(manifestNode.application)) { return `Missing ${colors_1.default.input('<application>')} XML node as a child node of ${colors_1.default.input('<manifest>')} in ${colors_1.default.strong(config.android.srcMainDir)}`; } let mainActivityClassPath = ''; const mainApplicationNode = applicationChildNodes.find(applicationChildNode => { const activityChildNodes = applicationChildNode.activity; if (!Array.isArray(activityChildNodes)) { return false; } const mainActivityNode = activityChildNodes.find(activityChildNode => { const intentFilterChildNodes = activityChildNode['intent-filter']; if (!Array.isArray(intentFilterChildNodes)) { return false; } return intentFilterChildNodes.find(intentFilterChildNode => { const actionChildNodes = intentFilterChildNode.action; if (!Array.isArray(actionChildNodes)) { return false; } const mainActionChildNode = actionChildNodes.find(actionChildNode => { const androidName = actionChildNode.$['android:name']; return androidName === 'android.intent.action.MAIN'; }); if (!mainActionChildNode) { return false; } const categoryChildNodes = intentFilterChildNode.category; if (!Array.isArray(categoryChildNodes)) { return false; } return categoryChildNodes.find(categoryChildNode => { const androidName = categoryChildNode.$['android:name']; return androidName === 'android.intent.category.LAUNCHER'; }); }); }); if (mainActivityNode) { mainActivityClassPath = mainActivityNode.$['android:name']; } return mainActivityNode; }); if (!mainApplicationNode) { return `Missing main ${colors_1.default.input('<activity>')} XML node in ${colors_1.default.strong(config.android.srcMainDir)}`; } if (!mainActivityClassPath) { return `Missing ${colors_1.default.input('<activity android:name="">')} attribute for MainActivity class in ${colors_1.default.strong(config.android.srcMainDir)}`; } return checkPackage(config, packageId, mainActivityClassPath); } async function checkPackage(config, packageId, mainActivityClassPath) { if (mainActivityClassPath.indexOf(packageId) !== 0) { return (`MainActivity ${mainActivityClassPath} is not in manifest package ${colors_1.default.input(packageId)}.\n` + `Please update the packages to be the same.`); } const appSrcMainJavaDir = path_1.join(config.android.srcMainDirAbs, 'java'); if (!(await utils_fs_1.pathExists(appSrcMainJavaDir))) { return `${colors_1.default.strong('java')} directory is missing in ${colors_1.default.strong(appSrcMainJavaDir)}`; } let checkPath = appSrcMainJavaDir; const packageParts = packageId.split('.'); for (const packagePart of packageParts) { try { fs_1.accessSync(path_1.join(checkPath, packagePart)); checkPath = path_1.join(checkPath, packagePart); } catch (e) { return (`${colors_1.default.strong(packagePart)} is missing in ${checkPath}.\n` + `Please create a directory structure matching the Package ID ${colors_1.default.input(packageId)} within the ${appSrcMainJavaDir} directory.`); } } const mainActivityClassName = mainActivityClassPath.split('.').pop(); const mainActivityClassFileName = `${mainActivityClassName}.java`; const mainActivityClassFilePath = path_1.join(checkPath, mainActivityClassFileName); if (!(await utils_fs_1.pathExists(mainActivityClassFilePath))) { return `Main activity file (${mainActivityClassFileName}) is missing in ${checkPath}`; } return checkBuildGradle(config, packageId); } async function checkBuildGradle(config, packageId) { const fileName = 'build.gradle'; const filePath = path_1.join(config.android.appDirAbs, fileName); if (!(await utils_fs_1.pathExists(filePath))) { return `${colors_1.default.strong(fileName)} file is missing in ${colors_1.default.strong(config.android.appDir)}`; } let fileContent = await utils_fs_1.readFile(filePath, { encoding: 'utf-8' }); fileContent = fileContent.replace(/'|"/g, '').replace(/\s+/g, ' '); const searchFor = `applicationId ${packageId}`; if (fileContent.indexOf(searchFor) === -1) { return `${colors_1.default.strong('build.gradle')} file missing ${colors_1.default.input(`applicationId "${packageId}"`)} config in ${filePath}`; } return null; } async function checkGradlew(config) { const fileName = 'gradlew'; const filePath = path_1.join(config.android.platformDirAbs, fileName); if (!(await utils_fs_1.pathExists(filePath))) { return `${colors_1.default.strong(fileName)} file is missing in ${colors_1.default.strong(config.android.platformDir)}`; } return null; } async function checkAndroidInstalled() { /* if (!await isInstalled('android')) { return 'Android is not installed. For information: https://developer.android.com/studio/index.html'; } */ return null; }