amis-rpc-design/node_modules/@react-native-community/cli-doctor/build/tools/installPods.js

150 lines
4.7 KiB
JavaScript
Raw Normal View History

2023-10-07 19:42:30 +08:00
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.installCocoaPods = installCocoaPods;
exports.runSudo = runSudo;
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _execa() {
const data = _interopRequireDefault(require("execa"));
_execa = function () {
return data;
};
return data;
}
function _chalk() {
const data = _interopRequireDefault(require("chalk"));
_chalk = function () {
return data;
};
return data;
}
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
function _sudoPrompt() {
const data = _interopRequireDefault(require("sudo-prompt"));
_sudoPrompt = function () {
return data;
};
return data;
}
var _runBundleInstall = _interopRequireDefault(require("./runBundleInstall"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
async function runPodInstall(loader, directory, shouldHandleRepoUpdate = true) {
try {
loader.start(`Installing CocoaPods dependencies ${_chalk().default.dim('(this may take a few minutes)')}`);
await (0, _execa().default)('bundle', ['exec', 'pod', 'install']);
} catch (error) {
// "pod" command outputs errors to stdout (at least some of them)
const stderr = error.stderr || error.stdout;
/**
* If CocoaPods failed due to repo being out of date, it will
* include the update command in the error message.
*
* `shouldHandleRepoUpdate` will be set to `false` to
* prevent infinite loop (unlikely scenario)
*/
if (stderr.includes('pod repo update') && shouldHandleRepoUpdate) {
await runPodUpdate(loader);
await runPodInstall(loader, directory, false);
} else {
loader.fail();
_cliTools().logger.error(stderr);
throw new (_cliTools().CLIError)(`Looks like your iOS environment is not properly set. Please go to ${_cliTools().link.docs('environment-setup')} and follow the React Native CLI QuickStart guide for macOS and iOS.`);
}
}
}
async function runPodUpdate(loader) {
try {
loader.start(`Updating CocoaPods repositories ${_chalk().default.dim('(this may take a few minutes)')}`);
await (0, _execa().default)('pod', ['repo', 'update']);
} catch (error) {
// "pod" command outputs errors to stdout (at least some of them)
_cliTools().logger.log(error.stderr || error.stdout);
loader.fail();
throw new (_cliTools().CLIError)(`Failed to update CocoaPods repositories for iOS project.\nPlease try again manually: "pod repo update".\nCocoaPods documentation: ${_chalk().default.dim.underline('https://cocoapods.org/')}`);
}
}
function runSudo(command) {
return new Promise((resolve, reject) => {
_sudoPrompt().default.exec(command, {
name: 'React Native CLI'
}, error => {
if (error) {
reject(error);
}
resolve();
});
});
}
async function installCocoaPodsWithGem() {
const options = ['install', 'cocoapods', '--no-document'];
try {
// First attempt to install `cocoapods`
await (0, _execa().default)('gem', options);
} catch (_error) {
// If that doesn't work then try with sudo
await runSudo(`gem ${options.join(' ')}`);
}
}
async function installCocoaPods(loader) {
loader.stop();
loader.start('Installing CocoaPods');
try {
await installCocoaPodsWithGem();
return loader.succeed();
} catch (error) {
loader.fail();
_cliTools().logger.error(error.stderr);
throw new (_cliTools().CLIError)(`An error occured while trying to install CocoaPods, which is required by this template.\nPlease try again manually: sudo gem install cocoapods.\nCocoaPods documentation: ${_chalk().default.dim.underline('https://cocoapods.org/')}`);
}
}
async function installPods({
directory,
loader
}) {
loader = loader || new (_cliTools().NoopLoader)();
try {
if (!_fs().default.existsSync('ios')) {
return;
}
process.chdir('ios');
const hasPods = _fs().default.existsSync('Podfile');
if (!hasPods) {
return;
}
if (_fs().default.existsSync('../Gemfile')) {
await (0, _runBundleInstall.default)(loader);
}
try {
// Check if "pod" is available and usable. It happens that there are
// multiple versions of "pod" command and even though it's there, it exits
// with a failure
await (0, _execa().default)('pod', ['--version']);
} catch (e) {
loader.info();
await installCocoaPods(loader);
}
await runPodInstall(loader, directory);
} finally {
process.chdir('..');
}
}
var _default = installPods;
exports.default = _default;
//# sourceMappingURL=installPods.ts.map