UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

178 lines • 6.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.massageUrl = massageUrl; exports.massageGithubUrl = massageGithubUrl; exports.addMetaData = addMetaData; exports.shouldDeleteHomepage = shouldDeleteHomepage; const tslib_1 = require("tslib"); const is_1 = tslib_1.__importDefault(require("@sindresorhus/is")); const github_url_from_git_1 = tslib_1.__importDefault(require("github-url-from-git")); const common_1 = require("../../util/common"); const url_1 = require("../../util/git/url"); const hostRules = tslib_1.__importStar(require("../../util/host-rules")); const regex_1 = require("../../util/regex"); const timestamp_1 = require("../../util/timestamp"); const url_2 = require("../../util/url"); const metadata_manual_1 = require("./metadata-manual"); const githubPages = (0, regex_1.regEx)('^https://([^.]+).github.com/([^/]+)$'); const gitPrefix = (0, regex_1.regEx)('^git:/?/?'); function massageUrl(sourceUrl) { // Replace git@ sourceUrl with https so hostname can be parsed const massagedUrl = massageGitAtUrl(sourceUrl); // Check if URL is valid const parsedUrl = (0, url_2.parseUrl)(massagedUrl); if (!parsedUrl) { return ''; } if ((0, common_1.detectPlatform)(massagedUrl) === 'gitlab') { return massageGitlabUrl(sourceUrl); } return massageGithubUrl(sourceUrl); } function massageGithubUrl(url) { const massagedUrl = massageGitAtUrl(url); return massagedUrl .replace('http:', 'https:') .replace('http+git:', 'https:') .replace('https+git:', 'https:') .replace('ssh://git@', 'https://') .replace(gitPrefix, 'https://') .replace(githubPages, 'https://github.com/$1/$2') .replace('www.github.com', 'github.com') .split('/') .slice(0, 5) .join('/'); } function massageGitlabUrl(url) { const massagedUrl = massageGitAtUrl(url); return massagedUrl .replace('http:', 'https:') .replace(gitPrefix, 'https://') .replace((0, regex_1.regEx)(/\/tree\/.*$/i), '') .replace((0, regex_1.regEx)(/\/$/i), '') .replace('.git', ''); } function massageGitAtUrl(url) { let massagedUrl = url; if (url.startsWith('git@')) { massagedUrl = url.replace(':', '/').replace('git@', 'https://'); } return massagedUrl; } function massageTimestamps(dep) { for (const release of dep.releases || []) { let { releaseTimestamp } = release; delete release.releaseTimestamp; releaseTimestamp = (0, timestamp_1.asTimestamp)(releaseTimestamp); if (releaseTimestamp) { release.releaseTimestamp = releaseTimestamp; } } } function addMetaData(dep, datasource, packageName) { massageTimestamps(dep); const packageNameLowercase = packageName.toLowerCase(); const manualChangelogUrl = metadata_manual_1.manualChangelogUrls[datasource]?.[packageNameLowercase]; if (manualChangelogUrl) { dep.changelogUrl = manualChangelogUrl; } const manualSourceUrl = metadata_manual_1.manualSourceUrls[datasource]?.[packageNameLowercase]; if (manualSourceUrl) { dep.sourceUrl = manualSourceUrl; } if (dep.sourceUrl && !dep.sourceDirectory) { try { const parsed = (0, url_1.parseGitUrl)(dep.sourceUrl); if (parsed.filepathtype === 'tree' && parsed.filepath !== '') { dep.sourceUrl = parsed.toString(); dep.sourceDirectory = parsed.filepath; } } catch { // ignore invalid urls } } if (!dep.sourceUrl && dep.changelogUrl && (0, common_1.detectPlatform)(dep.changelogUrl) === 'github') { dep.sourceUrl = dep.changelogUrl; } if (!dep.sourceUrl && dep.homepage) { const platform = (0, common_1.detectPlatform)(dep.homepage); if (platform === 'github' || platform === 'gitlab') { dep.sourceUrl = dep.homepage; } } const extraBaseUrls = []; // istanbul ignore next hostRules.hosts({ hostType: 'github' }).forEach((host) => { extraBaseUrls.push(host, `gist.${host}`); }); extraBaseUrls.push('gitlab.com'); if (dep.sourceUrl) { // try massaging it const massagedUrl = massageUrl(dep.sourceUrl); if (is_1.default.emptyString(massagedUrl)) { delete dep.sourceUrl; } else { // parse from github-url-from-git only supports Github URLs as its name implies dep.sourceUrl = (0, github_url_from_git_1.default)(massagedUrl, { extraBaseUrls, }) || dep.sourceUrl; // prefer massaged URL to source URL if the latter does not start with http:// or https:// // (e.g. git@somehost.com) and the detected platform is gitlab. // this allows to retrieve changelogs from git hosts other than Github if (!(0, url_2.isHttpUrl)(dep.sourceUrl) && (0, common_1.detectPlatform)(massagedUrl) === 'gitlab') { dep.sourceUrl = massagedUrl; } } } if (shouldDeleteHomepage(dep.sourceUrl, dep.homepage)) { delete dep.homepage; } // Clean up any empty urls const urlKeys = [ 'homepage', 'sourceUrl', 'changelogUrl', 'dependencyUrl', ]; for (const urlKey of urlKeys) { const urlVal = dep[urlKey]; if (is_1.default.string(urlVal) && (0, url_2.isHttpUrl)(urlVal.trim())) { dep[urlKey] = urlVal.trim(); } else { delete dep[urlKey]; } } } /** * Returns true if * 1. it's a github or gitlab url and not a path within the repo. * 2. it's equal to sourceURl * @param sourceUrl * @param homepage */ function shouldDeleteHomepage(sourceUrl, homepage) { if (is_1.default.nullOrUndefined(sourceUrl) || is_1.default.undefined(homepage)) { return false; } const massagedSourceUrl = massageUrl(sourceUrl); const platform = (0, common_1.detectPlatform)(homepage); if (platform === 'github' || platform === 'gitlab') { const sourceUrlParsed = (0, url_2.parseUrl)(massagedSourceUrl); if (is_1.default.nullOrUndefined(sourceUrlParsed)) { return false; } const homepageParsed = (0, url_2.parseUrl)(homepage); return (homepageParsed !== null && (0, url_2.trimTrailingSlash)(homepageParsed.pathname) === (0, url_2.trimTrailingSlash)(sourceUrlParsed.pathname)); } return massagedSourceUrl === homepage; } //# sourceMappingURL=metadata.js.map