UNPKG

hacker-news-reader

Version:

Hacker News Reader CLI

135 lines (108 loc) 4.11 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Api = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _request = require('request'); var _request2 = _interopRequireDefault(_request); var _config = require('../config'); var config = _interopRequireWildcard(_config); var _cacheLite = require('cache-lite'); var _cacheLite2 = _interopRequireDefault(_cacheLite); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Api = exports.Api = function () { /** * Constructor */ function Api() { _classCallCheck(this, Api); this.cache = new _cacheLite2.default(); this.topNewsList = []; } /** * Get the Top News List * @return Top News List */ _createClass(Api, [{ key: 'makeRequest', /** * Make HTTP request * @param {string} url - Hacker Newa API url * @return Promise */ value: function makeRequest(urlApi) { return new Promise(function (resolve, reject) { (0, _request2.default)(urlApi, function (err, res, body) { if (err) { return reject(err); } else if (res.statusCode !== 200) { var error = new Error('Unexpected status code: ' + res.statusCode); error.res = res; return reject(error); } return resolve(JSON.parse(body)); }); }); } /** * Get News Detail (url, comment, point ...) * @param {number} id - News ID * @param {number} index - Index * @return Promise */ }, { key: 'getNewsDetail', value: function getNewsDetail(id, index) { var _this = this; return new Promise(function (resolveNews, reject) { _this.cache.get(id).then(function (news) { _this.topNewsList.push(news); return resolveNews(); }).catch(function () { _this.makeRequest(config.item(id)).then(function (news) { var tempNews = news; tempNews.order = index + 1; _this.cache.set(id, tempNews, 60000).then(function () { _this.topNewsList.push(tempNews); return resolveNews(); }); }).catch(function (err) { return reject(err); }); }); }); } /** * Get top News from Hacker News * @return Promise */ }, { key: 'getTopNews', value: function getTopNews() { var _this2 = this; return new Promise(function (resolve, reject) { _this2.topNewsList = []; _this2.makeRequest(config.topNews).then(function (ids) { var promiseArray = []; ids.slice(0, config.MaxNews).forEach(function (id, index) { promiseArray.push(_this2.getNewsDetail(id, index)); }); Promise.all(promiseArray).then(function () { resolve(_this2.topNewsList); }); }).catch(function (err) { return reject(err); }); }); } }, { key: 'getTopNewsList', get: function get() { return this.topNewsList; } }]); return Api; }();