UNPKG

podcastsuite

Version:

A set of utilities to work with Podcasts

3 lines (2 loc) 8.54 kB
var e,t=(e=require("xml2js"))&&"object"==typeof e&&"default"in e?e.default:e,r=require("idb-keyval");function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function i(e,t){try{var r=e()}catch(e){return t(e)}return r&&r.then?r.then(void 0,t):r}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var o=function(e,t){return void 0===e&&(e="podcasts"),void 0===t&&(t="podcastsuite"),{name:e,db:t,set:function(e,t){var n=new r.Store(this.db,this.name);return r.set(e,t,n)},get:function(e){var t=new r.Store(this.db,this.name);return r.get(e,t)||null},del:function(e){var t=new r.Store(this.db,this.name);return r.del(e,t)},keys:function(){try{var e=new r.Store(this.db,this.name);return Promise.resolve(r.keys(e))}catch(e){return Promise.reject(e)}},entries:function(){try{var e=new r.Store(this.db,this.name);return Promise.resolve(this.keys(e)).then(function(t){return Promise.all(t.map(function(t){return r.get(t,e)}))})}catch(e){return Promise.reject(e)}}}},s={headers:{"User-Agent":"podcastsuite",Accept:"application/rss+xml"}},u=function(){function e(e){void 0===e&&(e={});var t=e.podcasts,r=void 0===t?[]:t,n=e.fresh,i=void 0===n?36e5:n,o=e.fetchEngine,s=void 0===o?fetch:o,u=e.shouldInit,a=void 0===u||u;this.proxy=e.proxy,this.fresh=i,this.fetchEngine=s,this.ready=a?this.init(r):this.ready=Promise.resolve(!0)}e.proxyURL=function(e,t){return""+t[e.protocol]+e.hostname+e.pathname+e.search+e.hash},e.parser=function(t){return new Promise(function(r,n){try{e.parserEngine(t,function(e,t){e&&n({error:!0,err:e}),r(t)})}catch(e){n(e)}})},e.createDatabase=function(e,t){return o(e,t)},e.fetch=function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(t,r){void 0===r&&(r={});var i=r.proxy,o=r.signal,u=r.fetchEngine,a=void 0===u?fetch:u,c=i?e.proxyURL(t,i):t,h=t.toString(),f=0,l=0;return new Promise(function(t,r){a(c.toString(),n({signal:o,method:"GET"},s)).then(function(e){if(!e.ok)throw new Error("Bad response: "+e.status);return f=Number(e.headers.get("content-length")),l=Number(e.headers.get("etag")),e.text()}).then(e.parser).then(function(t){return Promise.resolve(e.format(t,{etag:l,length:f,url:h}))}).then(t).catch(r)})}),e.fetchContent=function(t,r){void 0===r&&(r={});var n=r.proxy,i=r.signal,o=r.progress,s=r.fetchEngine;return(void 0===s?fetch:s)(n?e.proxyURL(t,n):t.toString(),{method:"GET",signal:i}).then(function(e){return function(t){var r=t.body&&t.body.getReader&&t.body.getReader();if(!e||!r)return t;var n=t.headers.get("content-length"),i=parseInt(n,10),o=0;return new Response(new ReadableStream({start:function(t){!function n(){r.read().then(function(r){var s=r.value;if(r.done)return 0===i&&e({loaded:o,total:i}),void t.close();e({loaded:o+=s.byteLength,total:i}),t.enqueue(s),n()}).catch(function(e){console.error(e),t.error(e)})}()}}))}}(o)).then(function(e){return e.blob()})},e.fetchSize=function(t,r){try{var o=r.proxy,u=r.signal,a=r.fetchEngine,c=void 0===a?fetch:a,h=o?e.proxyURL(t,o):t;return Promise.resolve(i(function(){return Promise.resolve(c(h.toString(),n({signal:u,method:"HEAD"},s))).then(function(e){return Number(e.headers.get("content-length"))})},function(){return null}))}catch(e){return Promise.reject(e)}},e.isFresh=function(e,t){return!!(t.fresh&&Date.now()-e.created<t.fresh)||!(!t.length||t.length!==e.length)};var t=e.prototype;return t.getPodcast=function(e,t){void 0===t&&(t={});try{var r=t.latest,n=void 0!==r&&r,i=t.save,o=void 0===i||i,s=t.fresh,u=void 0===s?this.fresh:s;try{var a=new URL(e);return Promise.resolve(n&&!u?this.refreshURL(a,o):this.requestURL(a,{save:o,fresh:u}))}catch(e){throw"Not a Valid URL"}}catch(e){return Promise.reject(e)}},t.getContent=function(t,r){void 0===r&&(r={});try{var n=this;return Promise.resolve(e.contentDB.get(t.toJSON())).then(function(o){var s=r.refresh;return!o||void 0!==s&&s?i(function(){return Promise.resolve(e.fetchContent(t,{proxy:n.proxy,fetchEngine:n.fetchEngine})).then(function(r){return Promise.resolve(e.contentDB.set(t.toJSON(),r)).then(function(){return r})})},function(e){throw console.error(e),"Error Retriving Content"}):o})}catch(e){return Promise.reject(e)}},t.getLibrary=function(){try{return Promise.resolve(e.db.keys())}catch(e){return Promise.reject(e)}},t.canUpdateLibrary=function(){try{var t=this;return Promise.resolve(e.db.entries()).then(function(r){var i=r.map(function(r){try{var i=r[0],o=r[1],s=new URL(i),u=o.length;return Promise.resolve(e.fetchSize(s,{proxy:t.proxy,fetchEngine:t.fetchEngine})).then(function(e){return[i,n({},r,{readyforUpdate:!(e!==u)})]})}catch(e){return Promise.reject(e)}});return Promise.resolve(Promise.all(i)).then(function(e){return e.filter(function(e){return e[1].readyforUpdate})})})}catch(e){return Promise.reject(e)}},t.mapLibraryEntries=function(t){try{return Promise.resolve(e.db.entries()).then(function(e){return e.map(t)})}catch(e){return Promise.reject(e)}},t.mapLibrary=function(t){try{return Promise.resolve(e.db.keys()).then(function(e){return Promise.allSettled(e.map(t))})}catch(e){return Promise.reject(e)}},t.requestURL=function(t,r){void 0===r&&(r={});try{var n=this;return Promise.resolve(e.db.get(t.toJSON())).then(function(i){var o=!1;function s(e){return o?e:Promise.resolve(n.refreshURL(t,l)).then(function(e){return a&&a(e),e})}var u=r.fn,a=void 0===u?null:u,c=r.fresh,h=void 0===c?n.fresh:c,f=r.save,l=void 0===f||f,m=function(){if(i)return a&&a(i),e.isFresh(i,{fresh:h})?(o=!0,i):Promise.resolve(e.fetchSize(t,{proxy:n.proxy,fetchEngine:n.fetchEngine})).then(function(t){if(e.isFresh(i,{length:t}))return o=!0,i})}();return m&&m.then?m.then(s):s(m)})}catch(e){return Promise.reject(e)}},t.refreshURL=function(t,r){void 0===r&&(r=!0);try{var n,o=this,s=i(function(){return Promise.resolve(e.fetch(t,{proxy:o.proxy,fetchEngine:o.fetchEngine})).then(function(i){n=i;var o=function(){if(r)return Promise.resolve(e.db.set(t.toJSON(),n)).then(function(){})}();if(o&&o.then)return o.then(function(){})})},function(e){throw new Error(e)});return Promise.resolve(s&&s.then?s.then(function(e){return n}):n)}catch(e){return Promise.reject(e)}},t.init=function(t){try{var r=this;return Promise.resolve(e.db.keys()).then(function(e){var n=Array.from(new Set([].concat(t,e))).map(function(e){return r.requestURL(new URL(e.toString()),{fn:function(){return null},fresh:r.fresh})});return Promise.resolve(Promise.allSettled(n)).then(function(e){return!!e})})}catch(e){return Promise.reject(e)}},e}();u.parserEngine=new t.Parser({trim:!1,normalize:!0,mergeAttrs:!0}).parseString,u.format=function(e,t){void 0===t&&(t={length:Date.now()});var r=t.url,i=Array.isArray(e.rss.channel)?e.rss.channel[0]:e.rss.channel,o=Object.assign(t,{items:[],created:Date.now()});return i.image&&(o.image=i.image[0].url),!o.image&&i["itunes:image"]&&(o.image=i["itunes:image"][0].href),["title","description","link","itunes:author","itunes:category","itunes:explicit","itunes:type","itunes:summary","copyright","language"].forEach(function(e){if(void 0!==i[e]){var t=e.split(":"),r=t[0],n=t[1];n?o[n]=i[e]&&i[e][0]:o[r]=i[e]&&i[e][0]}}),o.image=Array.isArray(o.image)&&o.image[0]||o.image,i.item&&(Array.isArray(i.item)||(i.item=[i.item]),i.item.forEach(function(e){var n={title:e.title?e.title[0]:"",description:e.description?e.description[0]:"",url:e.link?e.link[0]:"",guid:e.guid&&e.guid[0]&&(e.guid[0]._||e.guid[0]),podcast:t.url,link:r,media:""};if(["itunes:subtitle","itunes:summary","itunes:author","itunes:explicit","itunes:duration","itunes:season","itunes:episode","itunes:episodeType"].forEach(function(t){if(void 0!==e[t]){var r=t.split(":"),i=r[0],o=r[1];o?n[o]=e[t]&&e[t][0]:n[i]=e[t]&&e[t][0]}}),e["itunes:image"]&&(n.image=e["itunes:image"][0]&&e["itunes:image"][0].href?e["itunes:image"][0].href[0]:null),e.pubDate&&(n.created=Date.parse(e.pubDate[0])),n.extra={},e["media:content"]&&(n.extra.content=e["media:content"]),e["media:thumbnail"]&&(n.extra.thumbnail=e["media:thumbnail"]),e.enclosure){var i=[];Array.isArray(e.enclosure)||(e.enclosure=[e.enclosure]),e.enclosure.forEach(function(e){var t={};for(var r in e)t[r]=e[r][0];i.push(t)}),n.enclosures=i,n.media=i.length>0?i[0]:null}o.items.push(n)})),n({},o,t)},u.db=o(),u.contentDB=o("content"),module.exports=u; //# sourceMappingURL=index.js.map