UNPKG

@expo/cli

Version:
250 lines (249 loc) 9.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { hasPackageJsonDependencyListChangedAsync: ()=>hasPackageJsonDependencyListChangedAsync, installCocoaPodsAsync: ()=>installCocoaPodsAsync, maybePromptToSyncPodsAsync: ()=>maybePromptToSyncPodsAsync }); function _config() { const data = require("@expo/config"); _config = function() { return data; }; return data; } function _jsonFile() { const data = /*#__PURE__*/ _interopRequireDefault(require("@expo/json-file")); _jsonFile = function() { return data; }; return data; } function _packageManager() { const data = /*#__PURE__*/ _interopRequireWildcard(require("@expo/package-manager")); _packageManager = function() { return data; }; return data; } function _chalk() { const data = /*#__PURE__*/ _interopRequireDefault(require("chalk")); _chalk = function() { return data; }; return data; } function _fs() { const data = /*#__PURE__*/ _interopRequireDefault(require("fs")); _fs = function() { return data; }; return data; } function _path() { const data = /*#__PURE__*/ _interopRequireDefault(require("path")); _path = function() { return data; }; return data; } const _dir = require("./dir"); const _env = require("./env"); const _errors = require("./errors"); const _ora = require("./ora"); const _log = /*#__PURE__*/ _interopRequireWildcard(require("../log")); const _updatePackageJson = require("../prebuild/updatePackageJson"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const PROJECT_PREBUILD_SETTINGS = ".expo/prebuild"; const CACHED_PACKAGE_JSON = "cached-packages.json"; function getTempPrebuildFolder(projectRoot) { return _path().default.join(projectRoot, PROJECT_PREBUILD_SETTINGS); } function hasNewDependenciesSinceLastBuild(projectRoot, packageChecksums) { // TODO: Maybe comparing lock files would be better... const templateDirectory = getTempPrebuildFolder(projectRoot); const tempPkgJsonPath = _path().default.join(templateDirectory, CACHED_PACKAGE_JSON); if (!_fs().default.existsSync(tempPkgJsonPath)) { return true; } const { dependencies , devDependencies } = _jsonFile().default.read(tempPkgJsonPath); // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes. const hasNewDependencies = packageChecksums.dependencies !== dependencies; const hasNewDevDependencies = packageChecksums.devDependencies !== devDependencies; return hasNewDependencies || hasNewDevDependencies; } function createPackageChecksums(pkg) { return { dependencies: (0, _updatePackageJson.hashForDependencyMap)(pkg.dependencies || {}), devDependencies: (0, _updatePackageJson.hashForDependencyMap)(pkg.devDependencies || {}) }; } async function hasPackageJsonDependencyListChangedAsync(projectRoot) { const pkg = (0, _config().getPackageJson)(projectRoot); const packages = createPackageChecksums(pkg); const hasNewDependencies = hasNewDependenciesSinceLastBuild(projectRoot, packages); // Cache package.json await (0, _dir.ensureDirectoryAsync)(getTempPrebuildFolder(projectRoot)); const templateDirectory = _path().default.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON); await _jsonFile().default.writeAsync(templateDirectory, packages); return hasNewDependencies; } async function installCocoaPodsAsync(projectRoot) { let step = (0, _ora.logNewSection)("Installing CocoaPods..."); if (process.platform !== "darwin") { step.succeed("Skipped installing CocoaPods because operating system is not on macOS."); return false; } const packageManager = new (_packageManager()).CocoaPodsPackageManager({ cwd: _path().default.join(projectRoot, "ios"), silent: !(_env.env.EXPO_DEBUG || _env.env.CI) }); if (!await packageManager.isCLIInstalledAsync()) { try { // prompt user -- do you want to install cocoapods right now? step.text = "CocoaPods CLI not found in your PATH, installing it now."; step.stopAndPersist(); await _packageManager().CocoaPodsPackageManager.installCLIAsync({ nonInteractive: true, spawnOptions: { ...packageManager.options, // Don't silence this part stdio: [ "inherit", "inherit", "pipe" ] } }); step.succeed("Installed CocoaPods CLI."); step = (0, _ora.logNewSection)("Running `pod install` in the `ios` directory."); } catch (error) { step.stopAndPersist({ symbol: "⚠️ ", text: _chalk().default.red("Unable to install the CocoaPods CLI.") }); if (error instanceof _packageManager().CocoaPodsError) { _log.log(error.message); } else { _log.log(`Unknown error: ${error.message}`); } return false; } } try { await packageManager.installAsync({ spinner: step }); // Create cached list for later await hasPackageJsonDependencyListChangedAsync(projectRoot).catch(()=>null); step.succeed("Installed CocoaPods"); return true; } catch (error1) { step.stopAndPersist({ symbol: "⚠️ ", text: _chalk().default.red("Something went wrong running `pod install` in the `ios` directory.") }); if (error1 instanceof _packageManager().CocoaPodsError) { _log.log(error1.message); } else { _log.log(`Unknown error: ${error1.message}`); } return false; } } function doesProjectUseCocoaPods(projectRoot) { return _fs().default.existsSync(_path().default.join(projectRoot, "ios", "Podfile")); } function isLockfileCreated(projectRoot) { const podfileLockPath = _path().default.join(projectRoot, "ios", "Podfile.lock"); return _fs().default.existsSync(podfileLockPath); } function isPodFolderCreated(projectRoot) { const podFolderPath = _path().default.join(projectRoot, "ios", "Pods"); return _fs().default.existsSync(podFolderPath); } async function maybePromptToSyncPodsAsync(projectRoot) { if (!doesProjectUseCocoaPods(projectRoot)) { // Project does not use CocoaPods return; } if (!isLockfileCreated(projectRoot) || !isPodFolderCreated(projectRoot)) { if (!await installCocoaPodsAsync(projectRoot)) { throw new _errors.AbortCommandError(); } return; } // Getting autolinked packages can be heavy, optimize around checking every time. if (!await hasPackageJsonDependencyListChangedAsync(projectRoot)) { return; } await promptToInstallPodsAsync(projectRoot, []); } async function promptToInstallPodsAsync(projectRoot, missingPods) { if (missingPods == null ? void 0 : missingPods.length) { _log.log(`Could not find the following native modules: ${missingPods.map((pod)=>_chalk().default.bold(pod)).join(", ")}. Did you forget to run "${_chalk().default.bold("pod install")}" ?`); } try { if (!await installCocoaPodsAsync(projectRoot)) { throw new _errors.AbortCommandError(); } } catch (error) { await _fs().default.promises.rm(_path().default.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON), { recursive: true, force: true }); throw error; } } //# sourceMappingURL=cocoapods.js.map