amis-rpc-design/node_modules/@react-native-community/cli-tools/build/releaseChecker/getLatestRelease.js.map

1 line
6.8 KiB
Plaintext
Raw Normal View History

2023-10-07 19:42:30 +08:00
{"version":3,"names":["getLatestRelease","name","currentVersion","logger","debug","includes","cachedLatest","cacheManager","get","aWeek","lastChecked","now","Date","Number","eTag","latestVersion","getLatestRnDiffPurgeVersion","semver","compare","prerelease","version","changelogUrl","buildChangelogUrl","diffUrl","buildDiffUrl","e","undefined","options","headers","data","status","fetch","body","substring","eTagHeader","set"],"sources":["../../src/releaseChecker/getLatestRelease.ts"],"sourcesContent":["import semver from 'semver';\nimport cacheManager from './releaseCacheManager';\nimport {fetch} from '../fetch';\nimport logger from '../logger';\n\nexport type Release = {\n version: string;\n changelogUrl: string;\n diffUrl: string;\n};\n\n/**\n * Checks via GitHub API if there is a newer stable React Native release and,\n * if it exists, returns the release data.\n *\n * If the latest release is not newer or if it's a prerelease, the function\n * will return undefined.\n */\nexport default async function getLatestRelease(\n name: string,\n currentVersion: string,\n): Promise<Release | undefined> {\n logger.debug('Checking for a newer version of React Native');\n try {\n logger.debug(`Current version: ${currentVersion}`);\n\n // if the version is a 1000.0.0 version or 0.0.0, we want to bail\n // since they are nightlies or unreleased versions\n if (\n currentVersion.includes('1000.0.0') ||\n currentVersion.includes('0.0.0')\n ) {\n return;\n }\n\n const cachedLatest = cacheManager.get(name, 'latestVersion');\n\n if (cachedLatest) {\n logger.debug(`Cached release version: ${cachedLatest}`);\n }\n\n const aWeek = 7 * 24 * 60 * 60 * 1000;\n const lastChecked = cacheManager.get(name, 'lastChecked');\n const now = new Date();\n if (lastChecked && Number(now) - Number(new Date(lastChecked)) < aWeek) {\n logger.debug('Cached release is still recent, skipping remote check');\n return;\n }\n\n logger.debug('Checking for newer releases on GitHub');\n const eTag = cacheManager.get(name, 'eTag');\n const latestVersion = await getLatestRnDiffPurgeVersion(name, eTag);\n logger.debug(`Latest release: ${latestVersion}`);\n\n if (\n semver.compare(latestVersion, currentVersion) === 1 &&\n !semver.prerelease(latestVersion)\n ) {\n return {\n version: latestVersion,\n changelogUrl: buildChangelogUrl(latestVersion),\n diffUrl: buildDiffUrl(currentVersion),\n };\n }\n } catch (e) {\n logger.debug(\n 'Something went wrong with remote version checking, moving on',\n );\n logger.debug(e as any);\n }\n return undefined;\n}\n\nfunction buildChangelogUrl(version: string) {\n return `https://github.com/facebook/react-native/releases/tag/v${version}`;\n}\n\nfunction buildDiffUrl(version: string) {\n return `https://react-native-community.github.io/upgrade-helper/?from=${version}`;\n}\n\n/**\n * Returns the most recent React Native version available to upgrade to.\n */\nasync function getLatestRnDiffPurgeVersion(\n name: string,\n eTag?: string,\n): Promise<string> {\n const options = {\n // https://developer.github.com/v3/#user-agent-required\n headers: {'User-Agent': 'React-Native-CLI'} as Headers,\n };\n\n if (eTag) {\n options.headers['If-None-Match'] = eTag;\n }\n\n const {data, status, headers} = await fetch(\n 'https://api.github.com/repos/react-native-community/rn-diff-purge/tags',\n options,\n );\n\n // Remote is newer.\n if (status === 200) {\n const body: Array<any> = data;\n const latestVersion = body[0].name.substring(8);\n const eTagHeader = headers.get('eTag');\n\n // Update cache only if newer release is stable.\n if (!semver.prerelease(latestVersion) && eTagHeader) {\n logger.debug(`Saving ${eTagHeader} to cache`);\n cacheManager.set(name, 'eTag', eTagHeader);\n cacheManager.set(name, 'latestVersion', latestVersion);\n }\n\n return latestVersion;\n }\n\n // Cache is still valid.\n if (status === 304) {\n const la