From c3d45740cd196e8eda378d61cd9bbb729e2cfcca Mon Sep 17 00:00:00 2001 From: Zeya Peng Date: Mon, 8 Apr 2024 17:10:59 -0700 Subject: [PATCH] Use semver to compare version in cli instead of custom function (#43744) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43744 ## Changelog: [General] [Changed] - Use semver to do version comparison in cli instead of custom fn `parseVersion` ~~adding test for PR change in https://github.com/facebook/react-native/pull/43712~~ Reviewed By: NickGerleman Differential Revision: D55600458 fbshipit-source-id: eaffa3e89696b90fd354aefaba79e035d180a0b5 --- packages/react-native/cli.js | 9 +++------ packages/react-native/package.json | 1 + yarn.lock | 7 +++++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/react-native/cli.js b/packages/react-native/cli.js index 459213d4c51..28c17f96a06 100755 --- a/packages/react-native/cli.js +++ b/packages/react-native/cli.js @@ -13,6 +13,7 @@ const {name, version: currentVersion} = require('./package.json'); const chalk = require('chalk'); const {get} = require('https'); +const semver = require('semver'); const {URL} = require('url'); const deprecated = () => { @@ -56,11 +57,6 @@ async function getLatestVersion(registryHost = DEFAULT_REGISTRY_HOST) { }); } -function parseVersion(version) { - const [major, minor = 0, patch = 0] = version.split('-')[0].split('.'); - return major * 1000000 + minor * 1000 + patch; -} - /** * Warn when users are using `npx react-native init`, to raise awareness of the changes from RFC 0759. * @@ -134,7 +130,8 @@ async function main() { if (isNpxRuntime && !process.env.SKIP && currentVersion !== HEAD) { try { const latest = await getLatestVersion(); - if (parseVersion(latest) > parseVersion(currentVersion)) { + // TODO: T184416093 When cli is deprecated, remove semver from package.json + if (semver.lt(currentVersion, latest)) { const msg = ` ${chalk.bold.yellow('WARNING:')} You should run ${chalk.white.bold( 'npx react-native@latest', diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 98822e8d207..a2f5e92a21c 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -140,6 +140,7 @@ "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.24.0-canary-efb381bbf-20230505", + "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", "ws": "^6.2.2", diff --git a/yarn.lock b/yarn.lock index 882bc46412e..603de4532f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8511,6 +8511,13 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.1.3: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"