async-downloader
Version:
A lightweight, threaded resource download helper leveraging web workers
1 lines • 2.58 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(self,(function(){return(()=>{"use strict";var e={168:function(e,t,r){var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=o(r(717));t.default=class{constructor({returnType:e,workerUrl:t}={}){this.workerUrl=null!=t?t:"https://cdn.jsdelivr.net/npm/async-downloader@0.0.1/workers/download.worker.js",this.returnType=null!=e?e:"uri",this.hasWorkers=this.checkWorkerAvailability()}download(e,t=(e=>null)){return n(this,void 0,void 0,(function*(){if(!this.hasWorkers){const r=yield s.default(e,t);return this.formatResult(r)}return yield new Promise(((r,n)=>{const o=new window.Worker(this.workerUrl);o.addEventListener("message",(({data:{message:e,progress:o,result:s,type:i}})=>{switch(i){case"error":return n(new Error(e));case"progress":return t(o);case"result":return r(this.formatResult(s))}})),o.postMessage(e)}))}))}formatResult(e){return"uri"===this.returnType?URL.createObjectURL(e):e}checkWorkerAvailability(){return!!window&&!!window.Worker&&!!document}}},717:function(e,t){var r=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{u(n.next(e))}catch(e){s(e)}}function a(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.default=(e,t)=>r(void 0,void 0,void 0,(function*(){return yield new Promise(((r,n)=>{let o=(new Date).getTime();const s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="blob",s.addEventListener("progress",(({lengthComputable:e,loaded:r,total:n})=>{(new Date).getTime()<o+100||!e||(t(Math.floor(r/n*100)),o=(new Date).getTime())})),s.onload=()=>4!==s.readyState||200!==s.status?n(new Error("Download failed")):r(s.response),s.send()}))}))}},t={};return function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,r),s.exports}(168)})()}));