UNPKG

25.6 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../../src/commands/upgrade/upgrade.ts"],"names":["repos","rawDiffUrl","webDiffUrl","dependencyName","isConnected","output","includes","checkForErrors","CLIError","logger","warn","getLatestRNVersion","repoName","info","stdout","stderr","getRNPeerDeps","version","JSON","parse","getPatch","currentVersion","newVersion","config","patch","data","error","message","chalk","underline","dim","patchWithRenamedProjects","Object","keys","project","forEach","platform","replace","RegExp","projectName","packageName","split","join","getVersionToUpgradeTo","argv","projectDir","argVersion","semverCoercedVersion","semver","coerce","valid","gt","eq","dependencies","require","path","parsedVersion","length","satisfies","installDeps","root","peerDeps","deps","map","module","PackageManager","install","silent","installCocoaPodsDeps","process","directory","pop","debug","applyPatch","tmpPatchFile","defaultExcludes","filesThatDontExist","filesThatFailedToApply","relativePathFromRoot","excludes","e","errorLines","filter","x","Boolean","file","bold","upgrade","ctx","name","rnName","success","patchSuccess","fs","writeFileSync","Error","unlinkSync","stdio","upgradeCommand","description","func"],"mappings":"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","sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport chalk from 'chalk';\nimport semver from 'semver';\nimport execa from 'execa';\nimport {Config} from '@react-native-community/cli-types';\nimport {logger, CLIError, fetch} from '@react-native-community/cli-tools';\nimport * as PackageManager from '../../tools/packageManager';\nimport installPods from '../../tools/installPods';\n\ntype UpgradeError = {message: string; stderr: string};\n\n// https://react-native-community.github.io/upgrade-helper/?from=0.59.10&to=0.60.0-rc.3\n\ntype RepoNameType = 'react-native' | 'react-native-tvos';\n\nconst repos = {\n 'react-native': {\n rawDiffUrl:\n 'https://raw.githubusercontent.com/react-native-community/rn-diff-purge/diffs/diffs',\n webDiffUrl: 'https://react-native-community.github.io/upgrade-helper',\n dependencyName: 'react-native',\n },\n 'react-native-tvos': {\n rawDiffUrl:\n 'https://raw.githubusercontent.com/react-native-tvos/rn-diff-purge-tv/diffs/diffs',\n webDiffUrl: 'https://react-native-community.github.io/upgrade-helper',\n dependencyName: 'react-native@npm:react-native-tvos',\n },\n};\n\nconst isConnected = (output: string): boolean => {\n // there is no reliable way of checking for internet connectivity, so we should just\n // read the output from npm (to check for connectivity errors) which is faster and relatively more reliable.\n return !output.includes('the host is inaccessible');\n};\n\nconst checkForErrors = (output: string): void => {\n if (!output) {\n return;\n }\n if (!isConnected(output)) {\n throw new CLIError(\n 'Upgrade failed. You do not seem to have an internet connection.',\n );\n }\n\n if (output.includes('npm ERR')) {\n throw new CLIError(`Upgrade failed with the following errors:\\n${output}`);\n }\n\n if (output.includes('npm WARN')) {\n logger.warn(output);\n }\n};\n\nconst getLatestRNVersion = async (repoName: RepoNameType): Promise<string> => {\n logger.info('No version passed. Fetching latest...');\n const {stdout, stderr} = await execa('npm', ['info', repoName, 'version']);\n checkForErrors(stderr);\n return stdout;\n};\n\nconst getRNPeerDeps = async (\n version: string,\n repoName: RepoNameType,\n): Promise<{[key: string]: string}> => {\n const {stdout, stderr} = await execa('npm', [\n 'info',\n `${repoName}@${version}`,\n 'peerDependencies',\n '--json',\n ]);\n checkForErrors(stderr);\n return JSON.parse(stdout);\n};\n\nconst getPatch = async (\n currentVersion: string,\n newVersion: string,\n config: Config,\n repoName: RepoNameType,\n) => {\n let patch;\n\n logger.info(`Fetching diff between v${currentVersion} and v${newVersion}...`);\n\n try {\n const {data} = await fetch(\n `${repos[repoName].rawDiffUrl}/${currentVersion}..${newVersion}.diff`,\n );\n\n patch = data;\n } catch (error) {\n logger.error((error as UpgradeError).message);\n logger.error(\n `Failed to fetch diff for react-native@${newVersion}. Maybe it's not released yet?`,\n );\n logger.info(\n `For available releases to diff see: ${chalk.underline.dim(\n 'https://github.com/react-native-community/rn-diff-purge#diff-table-full-table-here',\n )}`,\n );\n return null;\n }\n\n let patchWithRenamedProjects = patch;\n\n Object.keys(config.project).forEach((platform) => {\n if (!config.project[platform]) {\n return;\n }\n if (platform === 'ios') {\n patchWithRenamedProjects = patchWithRenamedProjects.replace(\n new RegExp('RnDiffApp', 'g'),\n config.project[platform]!.projectName.replace('.xcodeproj', ''),\n );\n } else if (platform === 'android') {\n patchWithRenamedProjects = patchWithRenamedProjects\n .replace(\n new RegExp('com\\\\.rndiffapp', 'g'),\n config.project[platform]!.packageName,\n )\n .replace(\n new RegExp('com\\\\.rndiffapp'.split('.').join('/'), 'g'),\n config.project[platform]!.packageName.split('.').join('/'),\n );\n } else {\n logger.warn(\n `Unsupported platform: \"${platform}\". \\`upgrade\\` only supports iOS and Android.`,\n );\n }\n });\n\n return patchWithRenamedProjects;\n};\n\nconst getVersionToUpgradeTo = async (\n argv: Array<string>,\n currentVersion: string,\n projectDir: string,\n repoName: RepoNameType,\n) => {\n const argVersion = argv[0];\n const semverCoercedVersion = semver.coerce(argVersion);\n const newVersion = argVersion\n ? semver.valid(argVersion) ||\n (semverCoercedVersion ? semverCoercedVersion.version : null)\n : await getLatestRNVersion(repoName);\n\n if (!newVersion) {\n logger.error(\n `Provided version \"${argv[0]}\" is not allowed. Please pass a valid semver version`,\n );\n return null;\n }\n\n if (semver.gt(currentVersion, newVersion)) {\n logger.error(\n `Trying to upgrade from newer version \"${currentVersion}\" to older \"${newVersion}\"`,\n );\n return null;\n }\n if (semver.eq(currentVersion, newVersion)) {\n const {\n dependencies: {'react-native': version},\n } = require(path.join(projectDir, 'package.json'));\n\n const parsedVersion = version.split('@')[version.split('@').length - 1];\n\n if (semver.satisfies(newVersion, parsedVersion)) {\n logger.warn(\n `Specified version \"${newVersion}\" is already installed in node_modules and it satisfies \"${parsedVersion}\" semver range. No need to upgrade`,\n );\n return null;\n }\n logger.error(\n `Dependency mismatch. Specified version \"${newVersion}\" is already installed in node_modules and it doesn't satisfy \"${parsedVersion}\" semver range of your \"react-native\" dependency. Please re-install your dependencies`,\n );\n return null;\n }\n\n return newVersion;\n};\n\nconst installDeps = async (\n root: string,\n newVersion: string,\n repoName: RepoNameType,\n) => {\n logger.info(\n `Installing \"react-native@${newVersion}\" and its peer dependencies...`,\n );\n const peerDeps = await getRNPeerDeps(newVersion, repoName);\n const deps = [\n `${repos[repoName].dependencyName}@${newVersion}`,\n ...Object.keys(peerDeps).map((module) => `${module}@${peerDeps[module]}`),\n ];\n await PackageManager.install(deps, {\n silent: true,\n root,\n });\n await execa('git', ['add', 'package.json']);\n try {\n await execa('git', ['add', 'yarn.lock']);\n } catch (error) {\n // ignore\n }\n try {\n await execa('git', ['add', 'package-lock.json']);\n } catch (error) {\n // ignore\n }\n};\n\nconst installCocoaPodsDeps = async (projectDir: string) => {\n if (process.platform === 'darwin') {\n try {\n logger.info(\n `Installing CocoaPods dependencies ${chalk.dim(\n '(this may take a few minutes)',\n )}`,\n );\n await installPods({\n directory: projectDir.split('/').pop() || '',\n });\n } catch (error) {\n if ((error as UpgradeError).stderr) {\n logger.debug(\n `\"pod install\" or \"pod repo update\" failed. Error output:\\n${\n (error as UpgradeError).stderr\n }`,\n );\n }\n logger.error(\n 'Installation of CocoaPods dependencies failed. Try to install them manually by running \"pod install\" in \"ios\" directory after finishing upgrade',\n );\n }\n }\n};\n\nconst applyPatch = async (\n currentVersion: string,\n newVersion: string,\n tmpPatchFile: string,\n repoName: RepoNameType,\n) => {\n const defaultExcludes = ['package.json'];\n let filesThatDontExist: Array<string> = [];\n let filesThatFailedToApply: Array<string> = [];\n\n const {stdout: relativePathFromRoot} = await execa('git', [\n 'rev-parse',\n '--show-prefix',\n ]);\n try {\n try {\n const excludes = defaultExcludes.map(\n (e) => `--exclude=${path.join(relativePathFromRoot, e)}`,\n );\n await execa('git', [\n 'apply',\n // According to git documentation, `--binary` flag is turned on by\n // default. However it's necessary when running `git apply --check` to\n // actually accept binary files, maybe a bug in git?\n '--binary',\n '--check',\n tmpPatchFile,\n ...excludes,\n '-p2',\n '--3way',\n `--directory=${relativePathFromRoot}`,\n ]);\n logger.info('Applying diff...');\n } catch (error) {\n const errorLines: Array<string> = (error as UpgradeError).stderr.split(\n '\\n',\n );\n filesThatDontExist = [\n ...errorLines\n .filter((x) => x.includes('does not exist in index'))\n .map((x) =>\n x.replace(/^error: (.*): does not exist in index$/, '$1'),\n ),\n ].filter(Boolean);\n\n filesThatFailedToApply = errorLines\n .filter((x) => x.includes('patch does not apply'))\n .map((x) => x.replace(/^error: (.*): patch does not apply$/, '$1'))\n .filter(Boolean);\n\n logger.info('Applying diff...');\n logger.warn(\n `Excluding files that exist in the template, but not in your project:\\n${filesThatDontExist\n .map((file) => ` - ${chalk.bold(file)}`)\n .join('\\n')}`,\n );\n if (filesThatFailedToApply.length) {\n logger.error(\n `Excluding files that failed to apply the diff:\\n${filesThatFailedToApply\n .map((file) => ` - ${chalk.bold(file)}`)\n .join(\n '\\n',\n )}\\nPlease make sure to check the actual changes after the upgrade command is finished.\\nYou can find them in our Upgrade Helper web app: ${chalk.underline.dim(\n `${repos[repoName].webDiffUrl}/?from=${currentVersion}&to=${newVersion}`,\n )}`,\n );\n }\n } finally {\n const excludes = [\n ...defaultExcludes,\n ...filesThatDontExist,\n ...filesThatFailedToApply,\n ].map((e) => `--exclude=${path.join(relativePathFromRoot, e)}`);\n await execa('git', [\n 'apply',\n tmpPatchFile,\n ...excludes,\n '-p2',\n '--3way',\n `--directory=${relativePathFromRoot}`,\n ]);\n }\n } catch (error) {\n if ((error as UpgradeError).stderr) {\n logger.debug(\n `\"git apply\" failed. Error output:\\n${(error as UpgradeError).stderr}`,\n );\n }\n logger.error(\n 'Automatically applying diff failed. We did our best to automatically upgrade as many files as possible',\n );\n return false;\n }\n return true;\n};\n\n/**\n * Upgrade application to a new version of React Native.\n */\nasync function upgrade(argv: Array<string>, ctx: Config) {\n const tmpPatchFile = 'tmp-upgrade-rn.patch';\n const projectDir = ctx.root;\n const {name: rnName, version: currentVersion} = require(path.join(\n projectDir,\n 'node_modules/react-native/package.json',\n ));\n\n const repoName: RepoNameType =\n rnName === 'react-native-tvos' ? 'react-native-tvos' : 'react-native';\n\n const newVersion = await getVersionToUpgradeTo(\n argv,\n currentVersion,\n projectDir,\n repoName,\n );\n\n if (!newVersion) {\n return;\n }\n\n const patch = await getPatch(currentVersion, newVersion, ctx, repoName);\n\n if (patch === null) {\n return;\n }\n\n if (patch === '') {\n logger.info('Diff has no changes to apply, proceeding further');\n await installDeps(projectDir, newVersion, repoName);\n await installCocoaPodsDeps(projectDir);\n\n logger.success(\n `Upgraded React Native to v${newVersion} 🎉. Now you can review and commit the changes`,\n );\n return;\n }\n let patchSuccess;\n\n try {\n fs.writeFileSync(tmpPatchFile, patch);\n patchSuccess = await applyPatch(\n currentVersion,\n newVersion,\n tmpPatchFile,\n repoName,\n );\n } catch (error) {\n throw new Error((error as UpgradeError).stderr || (error as string));\n } finally {\n try {\n fs.unlinkSync(tmpPatchFile);\n } catch (e) {\n // ignore\n }\n const {stdout} = await execa('git', ['status', '-s']);\n if (!patchSuccess) {\n if (stdout) {\n logger.warn(\n 'Continuing after failure. Some of the files are upgraded but you will need to deal with conflicts manually',\n );\n await installDeps(projectDir, newVersion, repoName);\n logger.info('Running \"git status\" to check what changed...');\n await execa('git', ['status'], {stdio: 'inherit'});\n } else {\n logger.error(\n 'Patch failed to apply for unknown reason. Please fall back to manual way of upgrading',\n );\n }\n } else {\n await installDeps(projectDir, newVersion, repoName);\n await installCocoaPodsDeps(projectDir);\n logger.info('Running \"git status\" to check what changed...');\n await execa('git', ['status'], {stdio: 'inherit'});\n }\n if (!patchSuccess) {\n if (stdout) {\n logger.warn(\n 'Please run \"git diff\" to review the conflicts and resolve them',\n );\n }\n if (process.platform === 'darwin') {\n logger.warn(\n 'After resolving conflicts don\\'t forget to run \"pod install\" inside \"ios\" directory',\n );\n }\n logger.info(`You may find these resources helpful:\n• Release notes: ${chalk.underline.dim(\n `https://github.com/facebook/react-native/releases/tag/v${newVersion}`,\n )}\n• Manual Upgrade Helper: ${chalk.underline.dim(\n `${repos[repoName].webDiffUrl}/?from=${currentVersion}&to=${newVersion}`,\n )}\n• Git diff: ${chalk.underline.dim(\n `${repos[repoName].rawDiffUrl}/${currentVersion}..${newVersion}.diff`,\n )}`);\n\n throw new CLIError(\n 'Upgrade failed. Please see the messages above for details',\n );\n }\n }\n logger.success(\n `Upgraded React Native to v${newVersion} 🎉. Now you can review and commit the changes`,\n );\n}\nconst upgradeCommand = {\n name: 'upgrade [version]',\n description:\n \"Upgrade your app's template files to the specified or latest npm version using `rn-diff-purge` project. Only valid semver versions are allowed.\",\n func: upgrade,\n};\nexport default upgradeCommand;\n"]}
\No newline at end of file