UNPKG

npm-upgrade

Version:

Interactive CLI utility to easily update outdated NPM dependencies

79 lines (78 loc) 3.04 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchRemoteDb = void 0; exports.findModuleChangelogUrl = findModuleChangelogUrl; var _map2 = _interopRequireDefault(require("lodash/map")); var _memoize2 = _interopRequireDefault(require("lodash/memoize")); var _bluebird = _interopRequireDefault(require("bluebird")); var _got = _interopRequireDefault(require("got")); var _packageUtils = require("./packageUtils"); var _repositoryUtils = require("./repositoryUtils"); const pkg = require('../package.json'); const COMMON_CHANGELOG_FILES = ['CHANGELOG.md', 'History.md', 'HISTORY.md', 'CHANGES.md', 'CHANGELOG']; const CURRENT_REPOSITORY_ID = (0, _repositoryUtils.getRepositoryInfo)(pkg.repository.url).repositoryId; const DEFAULT_REMOTE_CHANGELOGS_DB_URL = `https://raw.githubusercontent.com/${CURRENT_REPOSITORY_ID}/master/db/changelogUrls.json`; const fetchRemoteDb = exports.fetchRemoteDb = (0, _memoize2.default)(async (url = DEFAULT_REMOTE_CHANGELOGS_DB_URL) => { try { const response = await (0, _got.default)(url, { json: true }); return response.body; } catch (err) { return null; } }); async function findModuleChangelogUrl(moduleName, remoteChangelogUrlsDbUrl = DEFAULT_REMOTE_CHANGELOGS_DB_URL) { let changelogUrls; if (remoteChangelogUrlsDbUrl) { changelogUrls = await fetchRemoteDb(remoteChangelogUrlsDbUrl); } changelogUrls = changelogUrls || require('../db/changelogUrls.json'); if (changelogUrls[moduleName]) { return changelogUrls[moduleName]; } const { changelog, repository } = await (0, _packageUtils.getModuleInfo)(moduleName); if (changelog) { return changelog; } if (repository && repository.url) { // If repository is located on one of known hostings, then we will try to request // some common changelog files from there or return URL for "Releases" page const { fileUrlBuilder, releasesPageUrl } = (0, _repositoryUtils.getRepositoryInfo)(repository.url) || {}; if (fileUrlBuilder) { const possibleChangelogUrls = (0, _map2.default)(COMMON_CHANGELOG_FILES, fileUrlBuilder); try { return await _bluebird.default.any((0, _map2.default)(possibleChangelogUrls, url => _bluebird.default.try(() => (0, _got.default)(url)).then(response => { // Considering only 2xx codes as successful as e.g. GitLab returns 304 for missing files if (response.statusCode >= 300) { throw response; } else { return url; } }))); } catch (err) { if (!(err instanceof _bluebird.default.AggregateError)) throw err; } } if (releasesPageUrl) { try { // Checking `releasesUrl`... await (0, _got.default)(releasesPageUrl); // `releasesUrl` is fine return releasesPageUrl; } catch (err) { // `releasesPageUrl` is broken } } } return null; }