@ionic/cli
Version:
A tool for creating and developing Ionic Framework mobile apps.
76 lines (75 loc) • 3.53 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackagePath = exports.getAndroidPackageFilePath = exports.getAndroidBuildOutputJson = exports.getPlatforms = void 0;
const tslib_1 = require("tslib");
const utils_array_1 = require("@ionic/utils-array");
const utils_fs_1 = require("@ionic/utils-fs");
const debug_1 = require("debug");
const path = tslib_1.__importStar(require("path"));
const guards_1 = require("../../../guards");
const color_1 = require("../../color");
const errors_1 = require("../../errors");
const debug = (0, debug_1.debug)('ionic:lib:cordova:project');
const CORDOVA_ANDROID_PACKAGE_PATH = 'platforms/android/app/build/outputs/apk/';
const CORDOVA_IOS_SIMULATOR_PACKAGE_PATH = 'platforms/ios/build/emulator';
const CORDOVA_IOS_DEVICE_PACKAGE_PATH = 'platforms/ios/build/device';
async function getPlatforms(projectDir) {
const platformsDir = path.resolve(projectDir, 'platforms');
const contents = await (0, utils_fs_1.readdirSafe)(platformsDir);
const platforms = await (0, utils_array_1.filter)(contents, async (file) => {
const stat = await (0, utils_fs_1.statSafe)(path.join(platformsDir, file));
return !file.startsWith('.') && typeof stat !== 'undefined' && stat.isDirectory();
});
return platforms;
}
exports.getPlatforms = getPlatforms;
async function getAndroidBuildOutputJson(paths) {
for (const p of paths) {
try {
const json = await (0, utils_fs_1.readJson)(p);
if ((0, guards_1.isAndroidBuildOutputFile)(json)) {
return json;
}
else if ((0, guards_1.isLegacyAndroidBuildOutputFile)(json)) {
return json;
}
else {
debug('Output file does not match expected format: %O', json);
}
}
catch (e) {
debug('Error parsing file %O: %O', p, e);
}
}
throw new errors_1.FatalException(`Could not find or parse valid build output file.\n` +
`Tried the following paths:\n` +
`- ${paths.join('\n- ')}`);
}
exports.getAndroidBuildOutputJson = getAndroidBuildOutputJson;
async function getAndroidPackageFilePath(root, { release = false }) {
const outputPath = path.resolve(root, CORDOVA_ANDROID_PACKAGE_PATH, release ? 'release' : 'debug');
const outputJsonPaths = ['output.json', 'output-metadata.json'].map(p => path.resolve(outputPath, p));
const outputJson = await getAndroidBuildOutputJson(outputJsonPaths);
const p = 'elements' in outputJson
? outputJson.elements[0].outputFile
: outputJson[0].path;
// TODO: handle multiple files from output.json, prompt to select?
return path.relative(root, path.resolve(outputPath, p));
}
exports.getAndroidPackageFilePath = getAndroidPackageFilePath;
/**
* Get the relative path to most recently built APK or IPA file
*/
async function getPackagePath(root, appName, platform, { emulator = false, release = false } = {}) {
if (platform === 'android') {
return getAndroidPackageFilePath(root, { emulator, release });
}
else if (platform === 'ios') {
if (emulator) {
return path.join(CORDOVA_IOS_SIMULATOR_PACKAGE_PATH, `${appName}.app`);
}
return path.join(CORDOVA_IOS_DEVICE_PACKAGE_PATH, `${appName}.ipa`);
}
throw new errors_1.FatalException(`Unknown package path for ${(0, color_1.input)(appName)} on ${(0, color_1.input)(platform)}.`);
}
exports.getPackagePath = getPackagePath;
;