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

138 lines
6.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.initCommand = void 0;
const tslib_1 = require("tslib");
const open_1 = tslib_1.__importDefault(require("open"));
const path_1 = require("path");
const colors_1 = tslib_1.__importDefault(require("../colors"));
const common_1 = require("../common");
const config_1 = require("../config");
const cordova_1 = require("../cordova");
const errors_1 = require("../errors");
const framework_configs_1 = require("../framework-configs");
const log_1 = require("../log");
const sysconfig_1 = require("../sysconfig");
const node_1 = require("../util/node");
const term_1 = require("../util/term");
async function initCommand(config, name, id, webDirFromCLI, skipAppIDValidation) {
var _a, _b;
try {
if (!(0, term_1.checkInteractive)(name, id)) {
return;
}
if (config.app.extConfigType !== 'json') {
(0, errors_1.fatal)(`Cannot run ${colors_1.default.input('init')} for a project using a non-JSON configuration file.\n` +
`Delete ${colors_1.default.strong(config.app.extConfigName)} and try again.`);
}
const isNewConfig = Object.keys(config.app.extConfig).length === 0;
const tsInstalled = !!(0, node_1.resolveNode)(config.app.rootDir, 'typescript');
const appName = await getName(config, name);
const appId = await getAppId(config, id);
const webDir = (0, term_1.isInteractive)()
? await getWebDir(config, webDirFromCLI)
: ((_a = webDirFromCLI !== null && webDirFromCLI !== void 0 ? webDirFromCLI : config.app.extConfig.webDir) !== null && _a !== void 0 ? _a : 'www');
if (skipAppIDValidation === true) {
await (0, common_1.check)([() => (0, common_1.checkAppName)(config, appName)]);
}
else {
await (0, common_1.check)([() => (0, common_1.checkAppName)(config, appName), () => (0, common_1.checkAppId)(config, appId)]);
}
const cordova = await (0, cordova_1.getCordovaPreferences)(config);
await runMergeConfig(config, {
appId,
appName,
webDir,
cordova,
}, isNewConfig && tsInstalled ? 'ts' : 'json');
}
catch (e) {
if (!(0, errors_1.isFatal)(e)) {
log_1.output.write('Usage: npx cap init appName appId\n' + 'Example: npx cap init "My App" "com.example.myapp"\n\n');
(0, errors_1.fatal)((_b = e.stack) !== null && _b !== void 0 ? _b : e);
}
throw e;
}
}
exports.initCommand = initCommand;
async function getName(config, name) {
var _a;
if (!name) {
const answers = await (0, log_1.logPrompt)(`${colors_1.default.strong(`What is the name of your app?`)}\n` +
`This should be a human-friendly app name, like what you'd see in the App Store.`, {
type: 'text',
name: 'name',
message: `Name`,
initial: config.app.appName ? config.app.appName : ((_a = config.app.package.name) !== null && _a !== void 0 ? _a : 'App'),
});
return answers.name;
}
return name;
}
async function getAppId(config, id) {
if (!id) {
const answers = await (0, log_1.logPrompt)(`${colors_1.default.strong(`What should be the Package ID for your app?`)}\n` +
`Package IDs (aka Bundle ID in iOS and Application ID in Android) are unique identifiers for apps. They must be in reverse domain name notation, generally representing a domain name that you or your company owns.`, {
type: 'text',
name: 'id',
message: `Package ID`,
initial: config.app.appId ? config.app.appId : 'com.example.app',
});
return answers.id;
}
return id;
}
async function getWebDir(config, webDir) {
if (!webDir) {
const framework = (0, framework_configs_1.detectFramework)(config);
if (framework === null || framework === void 0 ? void 0 : framework.webDir) {
return framework.webDir;
}
const answers = await (0, log_1.logPrompt)(`${colors_1.default.strong(`What is the web asset directory for your app?`)}\n` +
`This directory should contain the final ${colors_1.default.strong('index.html')} of your app.`, {
type: 'text',
name: 'webDir',
message: `Web asset directory`,
initial: config.app.webDir ? config.app.webDir : 'www',
});
return answers.webDir;
}
return webDir;
}
async function runMergeConfig(config, extConfig, type) {
const configDirectory = (0, path_1.dirname)(config.app.extConfigFilePath);
const newConfigPath = (0, path_1.resolve)(configDirectory, type === 'ts' ? config_1.CONFIG_FILE_NAME_TS : config_1.CONFIG_FILE_NAME_JSON);
await (0, common_1.runTask)(`Creating ${colors_1.default.strong((0, path_1.basename)(newConfigPath))} in ${colors_1.default.input(config.app.rootDir)}`, async () => {
await mergeConfig(config, extConfig, newConfigPath);
});
printNextSteps((0, path_1.basename)(newConfigPath));
if ((0, term_1.isInteractive)()) {
let sysconfig = await (0, sysconfig_1.readConfig)();
if (typeof sysconfig.signup === 'undefined') {
const signup = await promptToSignup();
sysconfig = { ...sysconfig, signup };
await (0, sysconfig_1.writeConfig)(sysconfig);
}
}
}
async function mergeConfig(config, extConfig, newConfigPath) {
const oldConfig = { ...config.app.extConfig };
const newConfig = { ...oldConfig, ...extConfig };
await (0, config_1.writeConfig)(newConfig, newConfigPath);
}
function printNextSteps(newConfigName) {
(0, log_1.logSuccess)(`${colors_1.default.strong(newConfigName)} created!`);
log_1.output.write(`\nNext steps: \n${colors_1.default.strong(`https://capacitorjs.com/docs/getting-started#where-to-go-next`)}\n`);
}
async function promptToSignup() {
const answers = await (0, log_1.logPrompt)(`Join the Ionic Community! 💙\n` +
`Connect with millions of developers on the Ionic Forum and get access to live events, news updates, and more.`, {
type: 'confirm',
name: 'create',
message: `Create free Ionic account?`,
initial: true,
});
if (answers.create) {
(0, open_1.default)(`http://ionicframework.com/signup?source=capacitor`);
}
return answers.create;
}