npm-upgrade
Version:
Interactive CLI utility to easily update outdated NPM dependencies
79 lines (78 loc) • 3.04 kB
JavaScript
;
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;
}