115 lines
5.6 KiB
JavaScript
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')}`);
|
|
}
|