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')}`);
 | 
						|
}
 |