| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Integration = void 0;
- const tslib_1 = require("tslib");
- const cli_framework_1 = require("@ionic/cli-framework");
- const utils_fs_1 = require("@ionic/utils-fs");
- const utils_terminal_1 = require("@ionic/utils-terminal");
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
- const debug_1 = require("debug");
- const lodash = tslib_1.__importStar(require("lodash"));
- const path = tslib_1.__importStar(require("path"));
- const debug = (0, debug_1.debug)('ionic:lib:integrations:capacitor');
- const __1 = require("../");
- const color_1 = require("../../color");
- const npm_1 = require("../../utils/npm");
- const config_1 = require("./config");
- class Integration extends __1.BaseIntegration {
- constructor() {
- super(...arguments);
- this.name = 'capacitor';
- this.summary = `Target native iOS and Android with Capacitor, Ionic's new native layer`;
- this.archiveUrl = undefined;
- this.getCapacitorCLIVersion = lodash.memoize(async () => {
- return this.e.shell.cmdinfo('capacitor', ['--version'], { cwd: this.root });
- });
- this.getCapacitorCLIConfig = lodash.memoize(async () => {
- const args = ['config', '--json'];
- debug('Getting config with Capacitor CLI: %O', args);
- let output = undefined;
- try {
- output = await (async (_command, _args = [], opts = {}) => {
- try {
- const proc = await this.e.shell.createSubprocess(_command, _args, opts);
- const out = await proc.output();
- return out.split('\n').join(' ').trim();
- }
- catch (err) {
- throw err;
- }
- })('capacitor', args, { cwd: this.root });
- }
- catch (error) {
- if (error.code === 'ERR_SUBPROCESS_COMMAND_NOT_FOUND') {
- throw new Error(`Capacitor command not found. Is the Capacitor CLI installed? (npm i -D @capacitor/cli)`);
- }
- else {
- throw new Error(error.message);
- }
- }
- if (!output) {
- debug('Could not get config from Capacitor CLI (probably old version)');
- return;
- }
- else {
- try {
- // Capacitor 1 returns the `command not found` error in stdout instead of stderror like in Capacitor 2
- // This ensures that the output from the command is valid JSON to account for this
- return JSON.parse(output);
- }
- catch (e) {
- debug('Could not get config from Capacitor CLI (probably old version)', e);
- return;
- }
- }
- });
- this.getCapacitorConfig = lodash.memoize(async () => {
- try {
- const cli = await this.getCapacitorCLIConfig();
- if (cli) {
- debug('Loaded Capacitor config!');
- return cli.app.extConfig;
- }
- }
- catch (ex) {
- // ignore
- }
- // fallback to reading capacitor.config.json if it exists
- const confPath = this.getCapacitorConfigJsonPath();
- if (!(await (0, utils_fs_1.pathExists)(confPath))) {
- debug('Capacitor config file does not exist at %O', confPath);
- debug('Failed to load Capacitor config');
- return;
- }
- const conf = new config_1.CapacitorJSONConfig(confPath);
- const extConfig = conf.c;
- debug('Loaded Capacitor config!');
- return extConfig;
- });
- }
- get config() {
- return new __1.IntegrationConfig(this.e.project.filePath, { pathPrefix: [...this.e.project.pathPrefix, 'integrations', this.name] });
- }
- get root() {
- return this.config.get('root', this.e.project.directory);
- }
- async add(details) {
- const confPath = this.getCapacitorConfigJsonPath();
- if (await (0, utils_fs_1.pathExists)(confPath)) {
- this.e.log.nl();
- this.e.log.warn(`Capacitor already exists in project.\n` +
- `Since the Capacitor config already exists (${(0, color_1.strong)((0, utils_terminal_1.prettyPath)(confPath))}), the Capacitor integration has been ${chalk_1.default.green('enabled')}.\n\n` +
- `You can re-integrate this project by doing the following:\n\n` +
- `- Run ${(0, color_1.input)(`ionic integrations disable ${this.name}`)}\n` +
- `- Remove the ${(0, color_1.strong)((0, utils_terminal_1.prettyPath)(confPath))} file\n` +
- `- Run ${(0, color_1.input)(`ionic integrations enable ${this.name} --add`)}\n`);
- }
- else {
- let name = this.e.project.config.get('name');
- let packageId = 'io.ionic.starter';
- let webDir = await this.e.project.getDefaultDistDir();
- const options = [];
- if (details.enableArgs && details.enableArgs.length > 0) {
- const parsedArgs = (0, cli_framework_1.parseArgs)(details.enableArgs);
- name = String(parsedArgs._[0]) || name;
- packageId = parsedArgs._[1] || packageId;
- if (parsedArgs['web-dir']) {
- webDir = parsedArgs['web-dir'];
- }
- }
- options.push('--web-dir', webDir);
- await this.installCapacitorCore();
- await this.installCapacitorCLI();
- await this.installCapacitorPlugins();
- await (0, utils_fs_1.mkdirp)(details.root);
- await this.e.shell.run('capacitor', ['init', name, packageId, ...options], { cwd: details.root });
- }
- await super.add(details);
- }
- getCapacitorConfigJsonPath() {
- return path.resolve(this.root, 'capacitor.config.json');
- }
- async installCapacitorCore() {
- const [manager, ...managerArgs] = await (0, npm_1.pkgManagerArgs)(this.e.config.get('npmClient'), { command: 'install', pkg: '@capacitor/core@latest' });
- await this.e.shell.run(manager, managerArgs, { cwd: this.root });
- }
- async installCapacitorCLI() {
- const [manager, ...managerArgs] = await (0, npm_1.pkgManagerArgs)(this.e.config.get('npmClient'), { command: 'install', pkg: '@capacitor/cli@latest', saveDev: true });
- await this.e.shell.run(manager, managerArgs, { cwd: this.root });
- }
- async installCapacitorPlugins() {
- const [manager, ...managerArgs] = await (0, npm_1.pkgManagerArgs)(this.e.config.get('npmClient'), { command: 'install', pkg: ['@capacitor/haptics', '@capacitor/app', '@capacitor/keyboard', '@capacitor/status-bar'] });
- await this.e.shell.run(manager, managerArgs, { cwd: this.root });
- }
- async personalize({ name, packageId }) {
- const confPath = this.getCapacitorConfigJsonPath();
- if (await (0, utils_fs_1.pathExists)(confPath)) {
- const conf = new config_1.CapacitorJSONConfig(confPath);
- conf.set('appName', name);
- if (packageId) {
- conf.set('appId', packageId);
- }
- }
- }
- async getInfo() {
- const conf = await this.getCapacitorConfig();
- const bundleId = conf?.appId;
- const [[capacitorCorePkg, capacitorCorePkgPath], capacitorCLIVersion, [capacitorIOSPkg, capacitorIOSPkgPath], [capacitorAndroidPkg, capacitorAndroidPkgPath],] = await (Promise.all([
- this.e.project.getPackageJson('@capacitor/core'),
- this.getCapacitorCLIVersion(),
- this.e.project.getPackageJson('@capacitor/ios'),
- this.e.project.getPackageJson('@capacitor/android'),
- ]));
- const info = [
- {
- group: 'capacitor',
- name: 'Capacitor CLI',
- key: 'capacitor_cli_version',
- value: capacitorCLIVersion || 'not installed',
- },
- {
- group: 'capacitor',
- name: '@capacitor/core',
- key: 'capacitor_core_version',
- value: capacitorCorePkg ? capacitorCorePkg.version : 'not installed',
- path: capacitorCorePkgPath,
- },
- {
- group: 'capacitor',
- name: '@capacitor/ios',
- key: 'capacitor_ios_version',
- value: capacitorIOSPkg ? capacitorIOSPkg.version : 'not installed',
- path: capacitorIOSPkgPath,
- },
- {
- group: 'capacitor',
- name: '@capacitor/android',
- key: 'capacitor_android_version',
- value: capacitorAndroidPkg ? capacitorAndroidPkg.version : 'not installed',
- path: capacitorAndroidPkgPath,
- },
- {
- group: 'capacitor',
- name: 'Bundle ID',
- key: 'bundle_id',
- value: bundleId || 'unknown',
- hidden: true,
- },
- ];
- return info;
- }
- }
- exports.Integration = Integration;
|