This commit is contained in:
Yamozha
2021-04-02 02:24:13 +03:00
parent c23950b545
commit 7256d79e2c
31493 changed files with 3036630 additions and 0 deletions

View File

@ -0,0 +1,144 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getLatestRelease;
function _semver() {
const data = _interopRequireDefault(require("semver"));
_semver = function () {
return data;
};
return data;
}
var _releaseCacheManager = _interopRequireDefault(require("./releaseCacheManager"));
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Checks via GitHub API if there is a newer stable React Native release and,
* if it exists, returns the release data.
*
* If the latest release is not newer or if it's a prerelease, the function
* will return undefined.
*/
async function getLatestRelease(name, currentVersion) {
_cliTools().logger.debug('Checking for a newer version of React Native');
try {
_cliTools().logger.debug(`Current version: ${currentVersion}`);
const cachedLatest = _releaseCacheManager.default.get(name, 'latestVersion');
if (cachedLatest) {
_cliTools().logger.debug(`Cached release version: ${cachedLatest}`);
}
const aWeek = 7 * 24 * 60 * 60 * 1000;
const lastChecked = _releaseCacheManager.default.get(name, 'lastChecked');
const now = new Date();
if (lastChecked && Number(now) - Number(new Date(lastChecked)) < aWeek) {
_cliTools().logger.debug('Cached release is still recent, skipping remote check');
return;
}
_cliTools().logger.debug('Checking for newer releases on GitHub');
const eTag = _releaseCacheManager.default.get(name, 'eTag');
const latestVersion = await getLatestRnDiffPurgeVersion(name, eTag);
_cliTools().logger.debug(`Latest release: ${latestVersion}`);
if (_semver().default.compare(latestVersion, currentVersion) === 1 && !_semver().default.prerelease(latestVersion)) {
return {
version: latestVersion,
changelogUrl: buildChangelogUrl(latestVersion),
diffUrl: buildDiffUrl(currentVersion)
};
}
} catch (e) {
_cliTools().logger.debug('Something went wrong with remote version checking, moving on');
_cliTools().logger.debug(e);
}
}
function buildChangelogUrl(version) {
return `https://github.com/facebook/react-native/releases/tag/v${version}`;
}
function buildDiffUrl(version) {
return `https://react-native-community.github.io/upgrade-helper/?from=${version}`;
}
/**
* Returns the most recent React Native version available to upgrade to.
*/
async function getLatestRnDiffPurgeVersion(name, eTag) {
const options = {
// https://developer.github.com/v3/#user-agent-required
headers: {
'User-Agent': 'React-Native-CLI'
}
};
if (eTag) {
options.headers['If-None-Match'] = eTag;
}
const {
data,
status,
headers
} = await (0, _cliTools().fetch)('https://api.github.com/repos/react-native-community/rn-diff-purge/tags', options); // Remote is newer.
if (status === 200) {
const body = data;
const latestVersion = body[0].name.substring(8);
const eTagHeader = headers.get('eTag'); // Update cache only if newer release is stable.
if (!_semver().default.prerelease(latestVersion) && eTagHeader) {
_cliTools().logger.debug(`Saving ${eTagHeader} to cache`);
_releaseCacheManager.default.set(name, 'eTag', eTagHeader);
_releaseCacheManager.default.set(name, 'latestVersion', latestVersion);
}
return latestVersion;
} // Cache is still valid.
if (status === 304) {
const latestVersion = _releaseCacheManager.default.get(name, 'latestVersion');
if (latestVersion) {
return latestVersion;
}
} // Should be returned only if something went wrong.
return '0.0.0';
}
//# sourceMappingURL=getLatestRelease.js.map

View File

@ -0,0 +1,61 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = releaseChecker;
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
var _resolveNodeModuleDir = _interopRequireDefault(require("../config/resolveNodeModuleDir"));
var _getLatestRelease = _interopRequireDefault(require("./getLatestRelease"));
var _printNewRelease = _interopRequireDefault(require("./printNewRelease"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// @ts-ignore - JS file
async function releaseChecker(root) {
try {
const {
version: currentVersion
} = require(_path().default.join((0, _resolveNodeModuleDir.default)(root, 'react-native'), 'package.json'));
const {
name
} = require(_path().default.join(root, 'package.json'));
const latestRelease = await (0, _getLatestRelease.default)(name, currentVersion);
if (latestRelease) {
(0, _printNewRelease.default)(name, latestRelease, currentVersion);
}
} catch (e) {
// We let the flow continue as this component is not vital for the rest of
// the CLI.
_cliTools().logger.debug('Cannot detect current version of React Native, ' + 'skipping check for a newer release');
_cliTools().logger.debug(e);
}
}
//# sourceMappingURL=index.js.map

View File

@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = printNewRelease;
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;
}
var _releaseCacheManager = _interopRequireDefault(require("./releaseCacheManager"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Notifies the user that a newer version of React Native is available.
*/
function printNewRelease(name, latestRelease, currentVersion) {
_cliTools().logger.info(`React Native v${latestRelease.version} is now available (your project is running on v${currentVersion}).`);
_cliTools().logger.info(`Changelog: ${_chalk().default.dim.underline(latestRelease.changelogUrl)}.`);
_cliTools().logger.info(`Diff: ${_chalk().default.dim.underline(latestRelease.diffUrl)}.`);
_cliTools().logger.info(`To upgrade, run "${_chalk().default.bold('react-native upgrade')}".`);
_releaseCacheManager.default.set(name, 'lastChecked', new Date().toISOString());
}
//# sourceMappingURL=printNewRelease.js.map

View File

@ -0,0 +1,123 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _os() {
const data = _interopRequireDefault(require("os"));
_os = function () {
return data;
};
return data;
}
function _mkdirp() {
const data = _interopRequireDefault(require("mkdirp"));
_mkdirp = function () {
return data;
};
return data;
}
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function loadCache(name) {
try {
const cacheRaw = _fs().default.readFileSync(_path().default.resolve(getCacheRootPath(), name), 'utf8');
const cache = JSON.parse(cacheRaw);
return cache;
} catch (e) {
if (e.code === 'ENOENT') {
// Create cache file since it doesn't exist.
saveCache(name, {});
}
_cliTools().logger.debug('No release cache found');
return undefined;
}
}
function saveCache(name, cache) {
_fs().default.writeFileSync(_path().default.resolve(getCacheRootPath(), name), JSON.stringify(cache, null, 2));
}
/**
* Returns the path string of `$HOME/.react-native-cli`.
*
* In case it doesn't exist, it will be created.
*/
function getCacheRootPath() {
const cachePath = _path().default.resolve(_os().default.homedir(), '.react-native-cli', 'cache');
if (!_fs().default.existsSync(cachePath)) {
_mkdirp().default.sync(cachePath);
}
return cachePath;
}
function get(name, key) {
const cache = loadCache(name);
if (cache) {
return cache[key];
}
return undefined;
}
function set(name, key, value) {
const cache = loadCache(name);
if (cache) {
cache[key] = value;
saveCache(name, cache);
}
}
var _default = {
get,
set
};
exports.default = _default;
//# sourceMappingURL=releaseCacheManager.js.map