UNPKG

@rt_lite/api

Version:

An unoficial rotten tomatoes REST api

2 lines (1 loc) 4.31 kB
var Y=Object.create;var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var J=(r,e,t)=>e in r?v(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Q=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $(e))!q.call(r,i)&&i!==t&&v(r,i,{get:()=>e[i],enumerable:!(n=G(e,i))||n.enumerable});return r};var P=(r,e,t)=>(t=r!=null?Y(j(r)):{},Q(e||!r||!r.__esModule?v(t,"default",{value:r,enumerable:!0}):t,r));var x=(r,e,t)=>(J(r,typeof e!="symbol"?e+"":e,t),t),D=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var o=(r,e,t)=>(D(r,e,"read from private field"),t?t.call(r):e.get(r)),l=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)},y=(r,e,t,n)=>(D(r,e,"write to private field"),n?n.call(r,t):e.set(r,t),t);var M=(r,e,t)=>(D(r,e,"access private method"),t);var W=P(require("koa"));var C=P(require("consola"));var T=class{#e;constructor(e){this.#e=e}log(e,...t){this.#e.log.bind(this)(e,...t)}warn(e,...t){this.#e.warn.bind(this)(e,...t)}error(e,...t){this.#e.error.bind(this)(e,...t)}info(e,...t){this.#e.info.bind(this)(e,...t)}success(e,...t){typeof this.#e.success=="function"?this.#e.success.bind(this)(e,...t):this.#e.info(e,...t)}};var X=new T(C.default),a=X;var V=P(require("@koa/router"));var w=class{#e;#t=Date.now();#r=this.#t;#n=this.#t;constructor(e){this.#e=e}get created(){return new Date(this.#t)}get modified(){return new Date(this.#r)}get read(){return new Date(this.#n)}get contents(){return this.#n=Date.now(),this.#e}set contents(e){this.#r=Date.now(),this.#n=this.#r,this.#e=e}};var S=r=>({get milliseconds(){return r},get seconds(){return this.milliseconds*1e3},get minutes(){return this.seconds*60},get hours(){return this.minutes*60},get days(){return this.hours*24},get weeks(){return this.days*7},get years(){return this.weeks*52}});var g,s,d,p,b,N,u=class{constructor({algorithm:e=u.DEFAULT_OPTIONS.algorithm,maxSize:t=u.DEFAULT_OPTIONS.maxSize,ttl:n=u.DEFAULT_OPTIONS.ttl}={...u.DEFAULT_OPTIONS}){l(this,b);l(this,g,void 0);l(this,s,new Map);l(this,d,void 0);l(this,p,void 0);y(this,g,e),y(this,d,t),y(this,p,n)}has(e){return o(this,s).has(e)}get(e){let t=o(this,s).get(e);return t?Date.now()-t.modified.getTime()>o(this,p)?(o(this,s).delete(e),null):t.contents:null}set(e,t){let n=o(this,s).get(e);if(n)return n.contents=t,o(this,s).set(e,n),t;let i=new w(t);return o(this,s).set(e,i),M(this,b,N).call(this),t}delete(e){let t=o(this,s).get(e);return t?(o(this,s).delete(e),t.contents):null}clear(){o(this,s).clear()}},m=u;g=new WeakMap,s=new WeakMap,d=new WeakMap,p=new WeakMap,b=new WeakSet,N=function(){if(o(this,s).size<=o(this,d))return;let e=()=>{let t=[...o(this,s).entries()].sort(([,{read:n}],[,{read:i}])=>n>i?1:n<i?-1:0)[0][0];this.delete(t)};switch(o(this,g)){case"least-recently-used":default:for(;o(this,s).size>o(this,d);)e()}},x(m,"DEFAULT_OPTIONS",{algorithm:"least-recently-used",maxSize:1/0,ttl:S(1).days});var k=require("@rt_lite/scraper"),Z=new k.RTScraper(!0,a),c=Z;var I={maxSize:100,ttl:S(6).hours},_=[],O=1/0,B=new m({...I}),ee=new m({...I}),te=new m({...I}),F=async()=>{a.info("Refreshing front page sets");let r=await c.getFrontPageSets();r.length<1||(_=[...r],O=Date.now())},L=(r,e)=>async t=>{let n=async()=>{let h=await e(t);return r.set(t,h),h};if(r.has(t)){let h=r.get(t);if(h!==null)return n(),h}return await n()},U=L(B,c.findMedia.bind(c)),A=L(ee,c.findMovies.bind(c)),E=L(te,c.findTVSeries.bind(c)),z=async()=>_.length>0?(Date.now()-O>I.ttl&&F(),_):(await F(),_);var re={movies:[],tvSeries:[]},f=new V.default;f.get("/",async r=>{let e=[];try{e=await z()}catch(t){a.error(t)}finally{r.body=e}});f.get("/:terms",async r=>{let{terms:e}=r.params,t={...re};try{t=await U(e)}catch(n){a.error(n)}finally{r.body=t}});f.get("/movies/:terms",async r=>{let{terms:e}=r.params,t=[];try{t=await A(e)}catch(n){a.error(n)}finally{r.body=t}});f.get("/tv-series/:terms",async r=>{let{terms:e}=r.params,t=[];try{t=await E(e)}catch(n){a.error(n)}finally{r.body=t}});var R=f;var ne=3e3,{env:{PORT:oe}}=process,K=new W.default,H=oe??ne;K.use(R.routes()).use(R.allowedMethods());K.listen(H,()=>{a.success(`App listening on port ${H}`)});