android-wrapper/@capacitor/cli/dist/tasks/add.js

115 lines
5.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addCommand = void 0;
const tslib_1 = require("tslib");
const utils_terminal_1 = require("@ionic/utils-terminal");
const fs_extra_1 = require("fs-extra");
const add_1 = require("../android/add");
const common_1 = require("../android/common");
const colors_1 = tslib_1.__importDefault(require("../colors"));
const common_2 = require("../common");
const errors_1 = require("../errors");
const add_2 = require("../ios/add");
const common_3 = require("../ios/common");
const log_1 = require("../log");
const sync_1 = require("./sync");
async function addCommand(config, selectedPlatformName) {
var _a;
if (selectedPlatformName && !(await (0, common_2.isValidPlatform)(selectedPlatformName))) {
const platformDir = (0, common_2.resolvePlatform)(config, selectedPlatformName);
if (platformDir) {
await (0, common_2.runPlatformHook)(config, selectedPlatformName, platformDir, 'capacitor:add');
}
else {
let msg = `Platform ${colors_1.default.input(selectedPlatformName)} not found.`;
if (await (0, common_2.isValidCommunityPlatform)(selectedPlatformName)) {
msg += `\nTry installing ${colors_1.default.strong(`@capacitor-community/${selectedPlatformName}`)} and adding the platform again.`;
}
if (await (0, common_2.isValidEnterprisePlatform)(selectedPlatformName)) {
msg +=
`\nThis is an enterprise platform and @ionic-enterprise/capacitor-${selectedPlatformName} is not installed.\n` +
`To learn how to use this platform, visit https://ionic.io/docs/${selectedPlatformName}`;
}
log_1.logger.error(msg);
}
}
else {
const knownPlatforms = await (0, common_2.getKnownPlatforms)();
const platformName = await (0, common_2.promptForPlatform)(knownPlatforms, `Please choose a platform to add:`, selectedPlatformName);
if (platformName === config.web.name) {
webWarning();
return;
}
const existingPlatformDir = await (0, common_2.getProjectPlatformDirectory)(config, platformName);
if (existingPlatformDir) {
(0, errors_1.fatal)(`${colors_1.default.input(platformName)} platform already exists.\n` +
`To re-add this platform, first remove ${colors_1.default.strong((0, utils_terminal_1.prettyPath)(existingPlatformDir))}, then run this command again.\n` +
`${colors_1.default.strong('WARNING')}: Your native project will be completely removed.`);
}
try {
await (0, common_2.check)([() => (0, common_2.checkPackage)(), () => (0, common_2.checkAppConfig)(config), ...addChecks(config, platformName)]);
await doAdd(config, platformName);
await editPlatforms(config, platformName);
if (await (0, fs_extra_1.pathExists)(config.app.webDirAbs)) {
await (0, sync_1.sync)(config, platformName, false, false);
if (platformName === config.android.name) {
await (0, common_2.runTask)('Syncing Gradle', async () => {
return (0, add_1.createLocalProperties)(config.android.platformDirAbs);
});
}
}
else {
log_1.logger.warn(`${colors_1.default.success(colors_1.default.strong('sync'))} could not run--missing ${colors_1.default.strong(config.app.webDir)} directory.`);
}
printNextSteps(platformName);
}
catch (e) {
if (!(0, errors_1.isFatal)(e)) {
(0, errors_1.fatal)((_a = e.stack) !== null && _a !== void 0 ? _a : e);
}
throw e;
}
}
}
exports.addCommand = addCommand;
function printNextSteps(platformName) {
(0, log_1.logSuccess)(`${colors_1.default.strong(platformName)} platform added!`);
log_1.output.write(`Follow the Developer Workflow guide to get building:\n${colors_1.default.strong(`https://capacitorjs.com/docs/basics/workflow`)}\n`);
}
function addChecks(config, platformName) {
if (platformName === config.ios.name) {
return [() => (0, common_3.checkIOSPackage)(config), () => (0, common_3.checkBundler)(config) || (0, common_3.checkCocoaPods)(config)];
}
else if (platformName === config.android.name) {
return [() => (0, common_1.checkAndroidPackage)(config)];
}
else if (platformName === config.web.name) {
return [];
}
else {
throw `Platform ${platformName} is not valid.`;
}
}
async function doAdd(config, platformName) {
await (0, common_2.runTask)(colors_1.default.success(colors_1.default.strong('add')), async () => {
if (platformName === config.ios.name) {
await (0, add_2.addIOS)(config);
}
else if (platformName === config.android.name) {
await (0, add_1.addAndroid)(config);
}
});
}
async function editPlatforms(config, platformName) {
if (platformName === config.ios.name) {
await (0, common_3.editProjectSettingsIOS)(config);
}
else if (platformName === config.android.name) {
await (0, common_1.editProjectSettingsAndroid)(config);
}
}
function webWarning() {
log_1.logger.error(`Not adding platform ${colors_1.default.strong('web')}.\n` +
`In Capacitor, the web platform is just your web app! For example, if you have a React or Angular project, the web platform is that project.\n` +
`To add Capacitor functionality to your web app, follow the Web Getting Started Guide: ${colors_1.default.strong('https://capacitorjs.com/docs/web')}`);
}