univ-conv
Version:
The universal binary and text converter
1 lines • 3.19 kB
JavaScript
(self.webpackChunkuniv_conv=self.webpackChunkuniv_conv||[]).push([[926,811],{926:(t,e,s)=>{"use strict";s.r(e),s.d(e,{PartialReadable:()=>h,ReadableConverter:()=>c});var r=s(811),a=s(5),n=s(689),i=s(374),o=s(354);class h extends r.Readable{constructor(t,e,s=Number.MAX_SAFE_INTEGER){super(),this.src=t,this.start=e,this.end=s,t.once("readable",(()=>this.setup()))}_read(){}setup(){let t=0;const e=e=>{const s=e,r=s.byteLength,a=t+r,n=(a<this.end?a:this.end)-t;let i;t<=this.start&&this.start<a?i=s.subarray(this.start-t,n):this.start<t&&t<this.end&&(i=s.subarray(0,n)),i&&this.push(i),t+=r},s=this.src;s.once("error",(t=>{this.destroy(t),s.off("data",e)})),s.once("end",(()=>{this.push(null),s.off("data",e)})),s.on("data",e)}}class u extends r.Readable{constructor(t,e,s=Number.MAX_SAFE_INTEGER){super(),this.stream=t,this.start=e,this.end=s,this.setup()}async setup(){const t=this.stream.getReader();try{const e=(0,a._)()._of("uint8array");let s,r=0;do{const a=await t.read(),n=a.value;if(s=a.done,n){const t=await e.from(n),s=t.byteLength,a=r+s,i=(a<this.end?a:this.end)-r;let o;r<=this.start&&this.start<a?o=t.subarray(this.start-r,i):this.start<r&&r<this.end&&(o=t.subarray(0,i)),o&&this.push(o),r+=s}}while(!s&&r<this.end);this.push(null)}catch(t){this.destroy(t)}finally{t.releaseLock(),this.stream.cancel().catch((t=>console.debug(t)))}}}class c extends a.f{constructor(){super(...arguments),this.type="readable"}empty(){return new r.Readable({read(){this.push(i.TO),this.push(null)}})}is(t){return(0,i.FA)(t)}async _from(t,e){if("string"==typeof t&&"url"===e.inputStringType)if(t.startsWith("http:")||t.startsWith("https:")){const e=await fetch(t);i.wX,t=e.body}else t.startsWith("file:")&&i.tb&&(t=await(0,i.tb)(t));if(this.is(t)){const{start:s,end:r}=(0,n.og)(e);return new h(t,s,r)}if((0,a._)().is("readablestream",t,e)){const{start:s,end:r}=(0,n.og)(e);return new u(t,s,r)}const s=await(0,a._)().convert("uint8array",t,e),o=new r.Duplex;return o.push(s),o.push(null),o}_getStartEnd(t,e){return Promise.resolve((0,n.og)(e))}_isEmpty(t){return!t.readable}_merge(t){const e=t.length;if(!t||0===e)return Promise.resolve(this.empty());if(1===e)return Promise.resolve(t[0]);const s=new r.PassThrough,a=r=>{if(r<e){const n=t[r];n.once("error",(a=>{n.unpipe(),s.destroy(a);for(let s=r;s<e;s++)t[s].destroy()})),n.once("end",(()=>a(++r))),n.pipe(s,{end:!1})}else s.end()};return a(0),Promise.resolve(s)}_size(){throw new Error("Cannot get size of Readable")}async _toArrayBuffer(t,e){const s=await this._toUint8Array(t,e);return s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)}async _toBase64(t,e){const s=await this._toUint8Array(t,e);return await(0,a._)()._of("uint8array").toBase64(s,(0,n.Q8)(e))}async _toText(t,e){const s=await this._toUint8Array(t,e),r=await(0,o.p)();return await r.bufferToText(s,e)}async _toUint8Array(t,e){const{start:s,end:r}=await this._getStartEnd(t,e),n=e.bufferSize;let o=0;const h=(0,a._)()._of("uint8array"),u=[];return await(0,i.FQ)(t,(async t=>{const e=await h.from(t,{bufferSize:n}),a=e.byteLength;let i=o+a;return null!=r&&r<i&&(i=r),o<s&&s<i?u.push(e.subarray(s,i)):s<=o&&u.push(e),o+=a,null==r||o<r})),Buffer.concat(u)}}},811:()=>{}}]);