UNPKG

@elchache/firebase-hackernews

Version:
1 lines 6.79 kB
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a="https://hacker-news.firebaseio.com",u=function(){return"object"===("undefined"==typeof window?"undefined":o(window))?performance.now():Date.now()},s=function(){function e(){r(this,e),this.reset()}return i(e,[{key:"reset",value:function(){this._data={items:{},top:[],new:[],best:[],ask:[],show:[],job:[],users:{}}}},{key:"touch",value:function(e){this._data[e]._updated=u()}},{key:"set",value:function(e,t){if(Array.isArray(this._data[e]))this._data[e]=t;else{if("object"!==o(this._data[e]))throw new TypeError("Unsupported type "+e);this._data[e][t.id]=t}this.touch(e)}},{key:"get",value:function(e){return this._data[e]}},{key:"exist",value:function(e){if(Array.isArray(this._data[e]))return this._data[e].length>0;if("object"===o(this._data[e]))return Object.keys(this._data[e])>0;throw new Error("Unsupported type "+e)}},{key:"length",value:function(e){return Array.isArray(this._data[e])?this._data[e].length:Object.keys(this._data[e]).length}},{key:"cached",value:function(e){return this._data.items[e]}},{key:"item",value:function(e){return this._data.items[e]}},{key:"data",value:function(e){return e&&(this._data=e),this._data}}]),e}(),c=["top","new","best","ask","show","job"],f=function(){function e(t,n){r(this,e),n=Object.assign({log:function(){}},n),this._app=t.initializeApp({databaseURL:a},"hackernews"),this._database=this._app.database(),this._cache=new s,this.log=n.log}return i(e,[{key:"_defaultOption",value:function(e,t){return Object.assign({page:1,count:30},t,e)}},{key:"_fetch",value:function(e){var t=this;return new Promise(function(n,r){t._database.ref("v0/"+e).once("value",function(e){n(e.val())}).catch(function(e){console.error(e),r(e)})})}},{key:"stories",value:function(e,t){var n=this;if(!c.includes(e))return new Error("Invalid type of stories "+e);t=this._defaultOption(t,{force:!1});var r=function(){return n._fetch(e+"stories").then(function(t){n._cache.set(e,t)})};return Promise.resolve(!t.force&&this._cache.exist(e)).then(function(e){return Promise.resolve(!!e||r())}).then(function(){return n._getItems(e,t)})}},{key:"_getItems",value:function(e,t,n){var r=this._cache.get(e),i=t.page>0?(t.page-1)*t.count:0,o=t.page>0?i+t.count:r.length,a=r.slice(i,o);return!0===n?this.itemsCached(a,t):this.items(a,t)}},{key:"items",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{force:!1};return Array.isArray(e)||(e=[e]),Promise.all(e.map(function(e){var r=n.force?void 0:t._cache.cached(e);return r?Promise.resolve(r):t._fetch("item/"+e)})).then(function(e){return e.forEach(function(e){return t._cache.set("items",e)}),e})}},{key:"user",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{force:!1},r=function(){return t._fetch("user/"+e).then(function(e){return t._cache.set("users",e)})};return Promise.resolve(!n.force&&this._cache.exist("users")).then(function(e){return Promise.resolve(!!e||r())}).then(function(){return t._cache.get("users")[e]})}},{key:"maxItem",value:function(){return this._fetch("maxitem")}},{key:"update",value:function(){var e=this;return this._fetch("updates").then(function(t){var n=t.profiles.map(function(t){return e.user(t,!0)}).concat(e.items(t.items));return Promise.all(n).then(function(){return t})})}},{key:"watch",value:function(){var e=this,t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=t?"on":"off";return Promise.all(c.map(function(t){return new Promise(function(r){e._database.ref("v0/"+t+"stories")[n]("value",function(n){e._cache.set(t,n.val()),r()})})}))}},{key:"length",value:function(e){var t=this;return new Promise(function(n){return n(t._cache.length(e))})}},{key:"kids",value:function(e){var t=this;return new Promise(function(n){var r={},i=function e(n){if(n&&n.length>0)return t.items(n).then(function(t){return Promise.all(t.map(function(t){return r[t.id]=t,e(t.kids)}))})},o=t._cache.item(e);(o?Promise.resolve([o]):t.items(e)).then(function(e){return i(t._cache.cached(e[0].id).kids).then(function(){n(r)})})})}},{key:"data",value:function(e){var t=this;return this.log("hn:data: "+e),new Promise(function(n){return n(t._cache.data(e))})}},{key:"itemsCached",value:function(e){var t=this;return Array.isArray(e)||(e=[e]),e.map(function(e){return t._cache.cached(e)}).filter(function(e){return void 0!==e})}},{key:"storiesCached",value:function(e,t){return c.includes(e)?this._getItems(e,this._defaultOption(t),!0):new Error("Invalid type of stories "+e)}},{key:"lengthCached",value:function(e){return this._cache.length(e)}},{key:"dataCached",value:function(e){return this.log("hn:dataCached: "+e),this._cache.data(e)}},{key:"fetch",value:function(e){var t=this;return new Promise(function(n,r){var i=e.replace("/hackernews/","").split("/"),o=i[0],a=i[1];return t.log("hn:fetch: "+e+", "+i+", "+o+", "+a),"user"===o&&a?t.user(a).then(n):"item"===o&&a?t.items(a&&a).then(n):"kids"===o&&a?t.kids(a).then(n):"length"===o&&a?t.length(a).then(n):/top|new|best|ask|show|job/.test(o)?t.stories(o,{page:a||1}).then(n):void r(new Error("invalid type: "+o+", or params: "+a))})}}]),e}();t.default=f},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.init=void 0;var r=n(0),i=function(e){return e&&e.__esModule?e:{default:e}}(r),o=t.init=function(){function e(e,n){if(!e)throw new Error("hackernew() requires firebase app instance");return t||(t=new i.default(e,n)),t}var t=void 0;return e}();t.default={init:o}}])});