From 0ac30cb7495070506f6f7ad5dce78c6790b8c23d Mon Sep 17 00:00:00 2001 From: CHEN Feng Date: Wed, 27 Jul 2022 22:40:20 +0800 Subject: [PATCH] Fix crash when reach github api rate limit * and a document error --- README.md | 2 +- bin/githubcontrib | 2 +- lib/githubLoader.js | 21 ++++++++++---- package-lock.json | 70 +++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 5 files changed, 80 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 51d011e..b515181 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ This way your contributors will be formatted in a table with their photos. The table strategy accepts the following parameters: -- `image-size` - Number - size of the user's avatars +- `imagesize` - Number - size of the user's avatars - `format` - Enum - `MARKDOWN` or `HTML`. Default == `HTML` - `showlogin` - Boolean, indicates whether the login of the contributor should be shown in the table. Default == `false` - `columns-count` - Number - number of columns for the table diff --git a/bin/githubcontrib b/bin/githubcontrib index a88a91c..3175cfa 100755 --- a/bin/githubcontrib +++ b/bin/githubcontrib @@ -18,7 +18,7 @@ var logResults = function (obj) { console.log( wantsJSON ? JSON.stringify(obj) : obj ); }; -var logErrors = function (obj) { console.error(obj); }; +var logErrors = function (obj) { console.error(obj); process.exit(1); }; /** diff --git a/lib/githubLoader.js b/lib/githubLoader.js index 22f966f..4fc31ab 100644 --- a/lib/githubLoader.js +++ b/lib/githubLoader.js @@ -1,8 +1,15 @@ "use strict"; -var q = require('q'), - https = require('https'), - merge = require('merge'); +var q = require('q'), + https = require('https'), + merge = require('merge'), + sprintf = require('sprintf-js').sprintf; + +var formatAPIError = function (response, result) { + return sprintf('GitHubAPIError: statusCode=%d, statusMessage=%s,\nmessage=%s,\ndocumentation_url=%s', + response.statusCode, response.statusMessage, + result.message, result.documentation_url); +}; module.exports = function GitHubAPI(options) { @@ -18,7 +25,7 @@ module.exports = function GitHubAPI(options) { function loadAllPages( path, headers ) { var jsonResponse = '', result = [], deferred = q.defer(); var concatData = function (chunk) { jsonResponse += chunk; }; - var reject = function (e) { console.log(e); deferred.reject(e); }; + var reject = function (e) { deferred.reject(e); }; var requestOptions = { port : 443, method : 'GET', @@ -46,6 +53,11 @@ module.exports = function GitHubAPI(options) { response.on('error', reject); response.on('data', concatData); response.on('end', function () { + if (response.statusCode !== 200) { + var thisResult = JSON.parse(jsonResponse); + reject(formatAPIError(response, thisResult)); + return; + } result = result.concat(JSON.parse(jsonResponse)); // Do we have more than 1 page of data ? @@ -54,7 +66,6 @@ module.exports = function GitHubAPI(options) { loadPage(page); return; } - deferred.resolve(result); cleanup(); }); diff --git a/package-lock.json b/package-lock.json index e9bb30e..6ef19bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,65 @@ { "name": "github-contributors-list", - "version": "1.2.4", - "lockfileVersion": 1, + "version": "1.2.5", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "github-contributors-list", + "version": "1.2.5", + "license": "MIT", + "dependencies": { + "marked": "^4.0.18", + "merge": "^2.1.1", + "minimist": "^1.2.0", + "q": "^1.5.1", + "sprintf-js": "^1.1.2" + }, + "bin": { + "githubcontrib": "bin/githubcontrib" + } + }, + "node_modules/marked": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", + "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + } + }, "dependencies": { "marked": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz", - "integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ==" + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", + "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==" }, "merge": { "version": "2.1.1", @@ -15,14 +67,14 @@ "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" }, "minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "sprintf-js": { "version": "1.1.2", diff --git a/package.json b/package.json index 9d28f3d..462831c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/mgechev/github-contributors-list", "dependencies": { - "marked": "^0.8.0", + "marked": "^4.0.18", "merge": "^2.1.1", "minimist": "^1.2.0", "q": "^1.5.1",