From 6de6a178ac717184e3897cabb270115f2cf9d848 Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Sat, 2 May 2020 20:29:31 +0200 Subject: [PATCH] Implement tag fetching for rest api as well --- lib/check.js | 19 ++++++++++++++----- lib/scheme-mapper.js | 25 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 lib/scheme-mapper.js diff --git a/lib/check.js b/lib/check.js index 5fa8003..7f00060 100644 --- a/lib/check.js +++ b/lib/check.js @@ -3,6 +3,7 @@ const https = require('https'); const github_graphql = require('github-graphql-client'); const semver = require('semver'); const query = require('./query'); +const schemeMapper = require('./scheme-mapper'); const pkg = require('../package.json'); /** @@ -79,14 +80,16 @@ const rest = (options, callback) => { let version = null; for (let i = 0; i < json.length; i++) { version = json[i]; - if (semver.gt(version.tag_name, options.currentVersion)) { + if (semver.gt(version[options.fetchTags ? 'name' : 'tag_name'], options.currentVersion)) { found = true; break; } } if (found) { - callback(null, version); + const mapped = schemeMapper[options.fetchTags ? 'tag' : 'release'](version); + console.log(mapped); + callback(null, mapped); } else { callback(null, null); } @@ -94,9 +97,15 @@ const rest = (options, callback) => { }; // build url - let apiUrl = `https://api.github.com/repos/${options.owner}/${options.repo}/releases`; - if (options.latestOnly) { - apiUrl += '/latest'; + let apiUrl = `https://api.github.com/repos/${options.owner}/${options.repo}`; + if (options.fetchTags) { + apiUrl += '/tags'; + } else { + apiUrl += '/releases'; + + if (options.latestOnly) { + apiUrl += '/latest'; + } } // define request options diff --git a/lib/scheme-mapper.js b/lib/scheme-mapper.js new file mode 100644 index 0000000..8b80936 --- /dev/null +++ b/lib/scheme-mapper.js @@ -0,0 +1,25 @@ +/** + * Maps a response object into the form described here: + * https://github.com/axelrindle/github-version-checker/wiki/API#releases + */ +module.exports.release = obj => { + return { + name: obj.name, + tag: { + name: obj.tag_name + }, + isPrerelease: obj.prerelease, + publishedAt: obj.published_at, + url: obj.html_url + } +}; + +/** + * Maps a response object into the form described here: + * https://github.com/axelrindle/github-version-checker/wiki/API#tags + */ +module.exports.tag = obj => { + return { + name: obj.name + } +}; \ No newline at end of file