wretch
Version:
A tiny wrapper built around fetch with an intuitive syntax.
2 lines • 1.25 kB
JavaScript
function e(e,t,n){try{let r=e.headers.get(`content-length`),i=t||(r?+r:0),a=0,o=new TransformStream({start(){n?.(a,i)},transform(e,t){a+=e.length,i<a&&(i=a),n?.(a,i),t.enqueue(e)}}),s=e.body.pipeThrough(o);return`status`in e?new Response(s,e):new Request(e,{body:s,duplex:`half`})}catch{return e}}const t=async(e,t)=>{let n=t.body instanceof ArrayBuffer?+t.body.byteLength:t.body instanceof Blob?+t.body.size:0;try{n||=(await new Request(e,t).blob()).size}catch{}return n},n=({getUploadTotal:n=t}={})=>{function r(t){return n=>(r,i)=>n(r,i).then(n=>t.progress?e(n,0,t.progress):n)}function i(t){return r=>async(i,a)=>!a.body||!t.upload?r(i,a):r(i,e(new Request(i,a),await n(i,a),t.upload))}return{beforeRequest(e,t,n){let a=[];return t.__uploadProgressCallback&&(n.upload=t.__uploadProgressCallback,delete t.__uploadProgressCallback),t.__downloadProgressCallback&&(n.progress=t.__downloadProgressCallback,delete t.__downloadProgressCallback),a.push(i(n)),a.push(r(n)),e.middlewares(a)},wretch:{onUpload(e){return this.options({__uploadProgressCallback:e})},onDownload(e){return this.options({__downloadProgressCallback:e})}},resolver:{progress(e){return this._sharedState.progress=e,this}}}};export{n as default};
//# sourceMappingURL=progress.min.mjs.map