it-length-prefixed-stream
Advanced tools
Comparing version
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.ItLengthPrefixedStream = factory()}(typeof self !== 'undefined' ? self : this, function () { | ||
"use strict";var ItLengthPrefixedStream=(()=>{var N=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var X=Object.prototype.hasOwnProperty;var z=(n,t)=>{for(var e in t)N(n,e,{get:t[e],enumerable:!0})},J=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of H(t))!X.call(n,i)&&i!==e&&N(n,i,{get:()=>t[i],enumerable:!(r=W(t,i))||r.enumerable});return n};var K=n=>J(N({},"__esModule",{value:!0}),n);var st={};z(st,{lpStream:()=>it});function m(){let n={};return n.promise=new Promise((t,e)=>{n.resolve=t,n.reject=e}),n}var p=class extends Error{type;code;constructor(t,e,r){super(t??"The operation was aborted"),this.type="aborted",this.name=r??"AbortError",this.code=e??"ABORT_ERR"}};async function T(n,t,e){if(t==null)return n;if(t.aborted)return n.catch(()=>{}),Promise.reject(new p(e?.errorMessage,e?.errorCode,e?.errorName));let r,i=new p(e?.errorMessage,e?.errorCode,e?.errorName);try{return await Promise.race([n,new Promise((h,s)=>{r=()=>{s(i)},t.addEventListener("abort",r)})])}finally{r!=null&&t.removeEventListener("abort",r)}}var R=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=m(),this.haveNext=m()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let t=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=m(),t}async throw(t){return this.ended=!0,t!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(t)),{done:!0,value:void 0}}async return(){let t={done:!0,value:void 0};return await this._push(void 0),t}async push(t,e){await this._push(t,e)}async end(t,e){t!=null?await this.throw(t):await this._push(void 0,e)}async _push(t,e){if(t!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;t!=null?this.nextResult={done:!1,value:t}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=m(),await T(this.readNext.promise,e?.signal,e)}};function k(){return new R}function b(n=0){return new Uint8Array(n)}function d(n=0){return new Uint8Array(n)}function D(n,t){t==null&&(t=n.reduce((i,h)=>i+h.length,0));let e=d(t),r=0;for(let i of n)e.set(i,r),r+=i.length;return e}function P(n,t){if(n===t)return!0;if(n.byteLength!==t.byteLength)return!1;for(let e=0;e<n.byteLength;e++)if(n[e]!==t[e])return!1;return!0}var C=Symbol.for("@achingbrain/uint8arraylist");function v(n,t){if(t==null||t<0)throw new RangeError("index is out of bounds");let e=0;for(let r of n){let i=e+r.byteLength;if(t<i)return{buf:r,index:t-e};e=i}throw new RangeError("index is out of bounds")}function x(n){return!!n?.[C]}var y=class n{bufs;length;[C]=!0;constructor(...t){this.bufs=[],this.length=0,t.length>0&&this.appendAll(t)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...t){this.appendAll(t)}appendAll(t){let e=0;for(let r of t)if(r instanceof Uint8Array)e+=r.byteLength,this.bufs.push(r);else if(x(r))e+=r.byteLength,this.bufs.push(...r.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=e}prepend(...t){this.prependAll(t)}prependAll(t){let e=0;for(let r of t.reverse())if(r instanceof Uint8Array)e+=r.byteLength,this.bufs.unshift(r);else if(x(r))e+=r.byteLength,this.bufs.unshift(...r.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=e}get(t){let e=v(this.bufs,t);return e.buf[e.index]}set(t,e){let r=v(this.bufs,t);r.buf[r.index]=e}write(t,e=0){if(t instanceof Uint8Array)for(let r=0;r<t.length;r++)this.set(e+r,t[r]);else if(x(t))for(let r=0;r<t.length;r++)this.set(e+r,t.get(r));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(t){if(t=Math.trunc(t),!(Number.isNaN(t)||t<=0)){if(t===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(t>=this.bufs[0].byteLength)t-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(t),this.length-=t;break}}}slice(t,e){let{bufs:r,length:i}=this._subList(t,e);return D(r,i)}subarray(t,e){let{bufs:r,length:i}=this._subList(t,e);return r.length===1?r[0]:D(r,i)}sublist(t,e){let{bufs:r,length:i}=this._subList(t,e),h=new n;return h.length=i,h.bufs=[...r],h}_subList(t,e){if(t=t??0,e=e??this.length,t<0&&(t=this.length+t),e<0&&(e=this.length+e),t<0||e>this.length)throw new RangeError("index is out of bounds");if(t===e)return{bufs:[],length:0};if(t===0&&e===this.length)return{bufs:this.bufs,length:this.length};let r=[],i=0;for(let h=0;h<this.bufs.length;h++){let s=this.bufs[h],o=i,c=o+s.byteLength;if(i=c,t>=c)continue;let w=t>=o&&t<c,l=e>o&&e<=c;if(w&&l){if(t===o&&e===c){r.push(s);break}let u=t-o;r.push(s.subarray(u,u+(e-t)));break}if(w){if(t===0){r.push(s);continue}r.push(s.subarray(t-o));continue}if(l){if(e===c){r.push(s);break}r.push(s.subarray(0,e-o));break}r.push(s)}return{bufs:r,length:e-t}}indexOf(t,e=0){if(!x(t)&&!(t instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let r=t instanceof Uint8Array?t:t.subarray();if(e=Number(e??0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),t.length===0)return e>this.length?this.length:e;let i=r.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let h=256,s=new Int32Array(h);for(let u=0;u<h;u++)s[u]=-1;for(let u=0;u<i;u++)s[r[u]]=u;let o=s,c=this.byteLength-r.byteLength,w=r.byteLength-1,l;for(let u=e;u<=c;u+=l){l=0;for(let g=w;g>=0;g--){let I=this.get(u+g);if(r[g]!==I){l=Math.max(1,g-o[I]);break}}if(l===0)return u}return-1}getInt8(t){let e=this.subarray(t,t+1);return new DataView(e.buffer,e.byteOffset,e.byteLength).getInt8(0)}setInt8(t,e){let r=d(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt8(0,e),this.write(r,t)}getInt16(t,e){let r=this.subarray(t,t+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt16(0,e)}setInt16(t,e,r){let i=b(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,e,r),this.write(i,t)}getInt32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt32(0,e)}setInt32(t,e,r){let i=b(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,e,r),this.write(i,t)}getBigInt64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigInt64(0,e)}setBigInt64(t,e,r){let i=b(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,e,r),this.write(i,t)}getUint8(t){let e=this.subarray(t,t+1);return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint8(0)}setUint8(t,e){let r=d(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint8(0,e),this.write(r,t)}getUint16(t,e){let r=this.subarray(t,t+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint16(0,e)}setUint16(t,e,r){let i=b(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,e,r),this.write(i,t)}getUint32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,e)}setUint32(t,e,r){let i=b(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,e,r),this.write(i,t)}getBigUint64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigUint64(0,e)}setBigUint64(t,e,r){let i=b(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,e,r),this.write(i,t)}getFloat32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat32(0,e)}setFloat32(t,e,r){let i=b(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,e,r),this.write(i,t)}getFloat64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat64(0,e)}setFloat64(t,e,r){let i=b(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,e,r),this.write(i,t)}equals(t){if(t==null||!(t instanceof n)||t.bufs.length!==this.bufs.length)return!1;for(let e=0;e<this.bufs.length;e++)if(!P(this.bufs[e],t.bufs[e]))return!1;return!0}static fromUint8Arrays(t,e){let r=new n;return r.bufs=t,e==null&&(e=t.reduce((i,h)=>i+h.byteLength,0)),r.length=e,r}};var U=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var _=class extends Error{code;constructor(t,e){super(t),this.code=e}},O=class extends _{type;constructor(t){super(t,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function G(n,t){let e=k();n.sink(e).catch(async s=>{await e.end(s)}),n.sink=async s=>{for await(let o of s)await e.push(o);await e.end()};let r=n.source;n.source[Symbol.iterator]!=null?r=n.source[Symbol.iterator]():n.source[Symbol.asyncIterator]!=null&&(r=n.source[Symbol.asyncIterator]());let i=new y;return{read:async(s,o)=>{o?.signal?.throwIfAborted();let c,w=new Promise((l,u)=>{c=()=>{u(new O("Read aborted"))},o?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:u,value:g}=await Promise.race([r.next(),w]);return u===!0?new y:g}for(;i.byteLength<s;){let{value:u,done:g}=await Promise.race([r.next(),w]);if(g===!0)throw new U("unexpected end of input");i.append(u)}let l=i.sublist(0,s);return i.consume(s),l}finally{c!=null&&o?.signal?.removeEventListener("abort",c)}},write:async(s,o)=>{o?.signal?.throwIfAborted(),s instanceof Uint8Array?await e.push(s,o):await e.push(s.subarray(),o)},unwrap:()=>{if(i.byteLength>0){let s=n.source;n.source=async function*(){t?.yieldBytes===!1?yield i:yield*i,yield*s}()}return n}}}var Y=Math.pow(2,7),Z=Math.pow(2,14),$=Math.pow(2,21),S=Math.pow(2,28),V=Math.pow(2,35),M=Math.pow(2,42),B=Math.pow(2,49),a=128,f=127;function L(n){if(n<Y)return 1;if(n<Z)return 2;if(n<$)return 3;if(n<S)return 4;if(n<V)return 5;if(n<M)return 6;if(n<B)return 7;if(Number.MAX_SAFE_INTEGER!=null&&n>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Q(n,t,e=0){switch(L(n)){case 8:t[e++]=n&255|a,n/=128;case 7:t[e++]=n&255|a,n/=128;case 6:t[e++]=n&255|a,n/=128;case 5:t[e++]=n&255|a,n/=128;case 4:t[e++]=n&255|a,n>>>=7;case 3:t[e++]=n&255|a,n>>>=7;case 2:t[e++]=n&255|a,n>>>=7;case 1:{t[e++]=n&255,n>>>=7;break}default:throw new Error("unreachable")}return t}function tt(n,t,e=0){switch(L(n)){case 8:t.set(e++,n&255|a),n/=128;case 7:t.set(e++,n&255|a),n/=128;case 6:t.set(e++,n&255|a),n/=128;case 5:t.set(e++,n&255|a),n/=128;case 4:t.set(e++,n&255|a),n>>>=7;case 3:t.set(e++,n&255|a),n>>>=7;case 2:t.set(e++,n&255|a),n>>>=7;case 1:{t.set(e++,n&255),n>>>=7;break}default:throw new Error("unreachable")}return t}function et(n,t){let e=n[t],r=0;if(r+=e&f,e<a||(e=n[t+1],r+=(e&f)<<7,e<a)||(e=n[t+2],r+=(e&f)<<14,e<a)||(e=n[t+3],r+=(e&f)<<21,e<a)||(e=n[t+4],r+=(e&f)*S,e<a)||(e=n[t+5],r+=(e&f)*V,e<a)||(e=n[t+6],r+=(e&f)*M,e<a)||(e=n[t+7],r+=(e&f)*B,e<a))return r;throw new RangeError("Could not decode varint")}function rt(n,t){let e=n.get(t),r=0;if(r+=e&f,e<a||(e=n.get(t+1),r+=(e&f)<<7,e<a)||(e=n.get(t+2),r+=(e&f)<<14,e<a)||(e=n.get(t+3),r+=(e&f)<<21,e<a)||(e=n.get(t+4),r+=(e&f)*S,e<a)||(e=n.get(t+5),r+=(e&f)*V,e<a)||(e=n.get(t+6),r+=(e&f)*M,e<a)||(e=n.get(t+7),r+=(e&f)*B,e<a))return r;throw new RangeError("Could not decode varint")}function j(n,t,e=0){return t==null&&(t=d(L(n))),t instanceof Uint8Array?Q(n,t,e):tt(n,t,e)}function q(n,t=0){return n instanceof Uint8Array?et(n,t):rt(n,t)}var A=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},F=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},E=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function it(n,t={}){let e=G(n,t);t.maxDataLength!=null&&t.maxLengthLength==null&&(t.maxLengthLength=L(t.maxDataLength));let r=t?.lengthDecoder??q,i=t?.lengthEncoder??j;return{read:async s=>{let o=-1,c=new y;for(;;){c.append(await e.read(1,s));try{o=r(c)}catch(w){if(w instanceof RangeError)continue;throw w}if(o<0)throw new A("Invalid message length");if(t?.maxLengthLength!=null&&c.byteLength>t.maxLengthLength)throw new E("message length length too long");if(o>-1)break}if(t?.maxDataLength!=null&&o>t.maxDataLength)throw new F("message length too long");return e.read(o,s)},write:async(s,o)=>{await e.write(new y(i(s.byteLength),s),o)},writeV:async(s,o)=>{let c=new y(...s.flatMap(w=>[i(w.byteLength),w]));await e.write(c,o)},unwrap:()=>e.unwrap()}}return K(st);})(); | ||
"use strict";var ItLengthPrefixedStream=(()=>{var R=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var H=(n,t)=>{for(var e in t)R(n,e,{get:t[e],enumerable:!0})},X=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of q(t))!W.call(n,i)&&i!==e&&R(n,i,{get:()=>t[i],enumerable:!(r=j(t,i))||r.enumerable});return n};var z=n=>X(R({},"__esModule",{value:!0}),n);var nt={};H(nt,{lpStream:()=>rt});function d(){let n={};return n.promise=new Promise((t,e)=>{n.resolve=t,n.reject=e}),n}var x=class extends Error{type;code;constructor(t,e,r){super(t??"The operation was aborted"),this.type="aborted",this.name=r??"AbortError",this.code=e??"ABORT_ERR"}};async function L(n,t,e){if(t==null)return n;if(t.aborted)return n.catch(()=>{}),Promise.reject(new x(e?.errorMessage,e?.errorCode,e?.errorName));let r,i=new x(e?.errorMessage,e?.errorCode,e?.errorName);try{return await Promise.race([n,new Promise((h,s)=>{r=()=>{s(i)},t.addEventListener("abort",r)})])}finally{r!=null&&t.removeEventListener("abort",r)}}var D=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=d(),this.haveNext=d()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let t=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=d(),t}async throw(t){return this.ended=!0,this.error=t,t!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(t)),{done:!0,value:void 0}}async return(){let t={done:!0,value:void 0};return this.ended=!0,this.nextResult=t,this.haveNext.resolve(),t}async push(t,e){await this._push(t,e)}async end(t,e){t!=null?await this.throw(t):await this._push(void 0,e)}async _push(t,e){if(t!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;t!=null?this.nextResult={done:!1,value:t}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=d(),await L(this.readNext.promise,e?.signal,e)}};function B(){return new D}function l(n=0){return new Uint8Array(n)}function y(n=0){return new Uint8Array(n)}function S(n,t){t==null&&(t=n.reduce((i,h)=>i+h.length,0));let e=y(t),r=0;for(let i of n)e.set(i,r),r+=i.length;return e}function T(n,t){if(n===t)return!0;if(n.byteLength!==t.byteLength)return!1;for(let e=0;e<n.byteLength;e++)if(n[e]!==t[e])return!1;return!0}var C=Symbol.for("@achingbrain/uint8arraylist");function k(n,t){if(t==null||t<0)throw new RangeError("index is out of bounds");let e=0;for(let r of n){let i=e+r.byteLength;if(t<i)return{buf:r,index:t-e};e=i}throw new RangeError("index is out of bounds")}function U(n){return!!n?.[C]}var g=class n{bufs;length;[C]=!0;constructor(...t){this.bufs=[],this.length=0,t.length>0&&this.appendAll(t)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...t){this.appendAll(t)}appendAll(t){let e=0;for(let r of t)if(r instanceof Uint8Array)e+=r.byteLength,this.bufs.push(r);else if(U(r))e+=r.byteLength,this.bufs.push(...r.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=e}prepend(...t){this.prependAll(t)}prependAll(t){let e=0;for(let r of t.reverse())if(r instanceof Uint8Array)e+=r.byteLength,this.bufs.unshift(r);else if(U(r))e+=r.byteLength,this.bufs.unshift(...r.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=e}get(t){let e=k(this.bufs,t);return e.buf[e.index]}set(t,e){let r=k(this.bufs,t);r.buf[r.index]=e}write(t,e=0){if(t instanceof Uint8Array)for(let r=0;r<t.length;r++)this.set(e+r,t[r]);else if(U(t))for(let r=0;r<t.length;r++)this.set(e+r,t.get(r));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(t){if(t=Math.trunc(t),!(Number.isNaN(t)||t<=0)){if(t===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(t>=this.bufs[0].byteLength)t-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(t),this.length-=t;break}}}slice(t,e){let{bufs:r,length:i}=this._subList(t,e);return S(r,i)}subarray(t,e){let{bufs:r,length:i}=this._subList(t,e);return r.length===1?r[0]:S(r,i)}sublist(t,e){let{bufs:r,length:i}=this._subList(t,e),h=new n;return h.length=i,h.bufs=[...r],h}_subList(t,e){if(t=t??0,e=e??this.length,t<0&&(t=this.length+t),e<0&&(e=this.length+e),t<0||e>this.length)throw new RangeError("index is out of bounds");if(t===e)return{bufs:[],length:0};if(t===0&&e===this.length)return{bufs:this.bufs,length:this.length};let r=[],i=0;for(let h=0;h<this.bufs.length;h++){let s=this.bufs[h],o=i,u=o+s.byteLength;if(i=u,t>=u)continue;let w=t>=o&&t<u,b=e>o&&e<=u;if(w&&b){if(t===o&&e===u){r.push(s);break}let c=t-o;r.push(s.subarray(c,c+(e-t)));break}if(w){if(t===0){r.push(s);continue}r.push(s.subarray(t-o));continue}if(b){if(e===u){r.push(s);break}r.push(s.subarray(0,e-o));break}r.push(s)}return{bufs:r,length:e-t}}indexOf(t,e=0){if(!U(t)&&!(t instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let r=t instanceof Uint8Array?t:t.subarray();if(e=Number(e??0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),t.length===0)return e>this.length?this.length:e;let i=r.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let h=256,s=new Int32Array(h);for(let c=0;c<h;c++)s[c]=-1;for(let c=0;c<i;c++)s[r[c]]=c;let o=s,u=this.byteLength-r.byteLength,w=r.byteLength-1,b;for(let c=e;c<=u;c+=b){b=0;for(let m=w;m>=0;m--){let I=this.get(c+m);if(r[m]!==I){b=Math.max(1,m-o[I]);break}}if(b===0)return c}return-1}getInt8(t){let e=this.subarray(t,t+1);return new DataView(e.buffer,e.byteOffset,e.byteLength).getInt8(0)}setInt8(t,e){let r=y(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt8(0,e),this.write(r,t)}getInt16(t,e){let r=this.subarray(t,t+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt16(0,e)}setInt16(t,e,r){let i=l(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,e,r),this.write(i,t)}getInt32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt32(0,e)}setInt32(t,e,r){let i=l(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,e,r),this.write(i,t)}getBigInt64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigInt64(0,e)}setBigInt64(t,e,r){let i=l(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,e,r),this.write(i,t)}getUint8(t){let e=this.subarray(t,t+1);return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint8(0)}setUint8(t,e){let r=y(1);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint8(0,e),this.write(r,t)}getUint16(t,e){let r=this.subarray(t,t+2);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint16(0,e)}setUint16(t,e,r){let i=l(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,e,r),this.write(i,t)}getUint32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,e)}setUint32(t,e,r){let i=l(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,e,r),this.write(i,t)}getBigUint64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getBigUint64(0,e)}setBigUint64(t,e,r){let i=l(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,e,r),this.write(i,t)}getFloat32(t,e){let r=this.subarray(t,t+4);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat32(0,e)}setFloat32(t,e,r){let i=l(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,e,r),this.write(i,t)}getFloat64(t,e){let r=this.subarray(t,t+8);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat64(0,e)}setFloat64(t,e,r){let i=l(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,e,r),this.write(i,t)}equals(t){if(t==null||!(t instanceof n)||t.bufs.length!==this.bufs.length)return!1;for(let e=0;e<this.bufs.length;e++)if(!T(this.bufs[e],t.bufs[e]))return!1;return!0}static fromUint8Arrays(t,e){let r=new n;return r.bufs=t,e==null&&(e=t.reduce((i,h)=>i+h.byteLength,0)),r.length=e,r}};var A=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function G(n,t){let e=B();n.sink(e).catch(async s=>{await e.end(s)}),n.sink=async s=>{for await(let o of s)await e.push(o);await e.end()};let r=n.source;n.source[Symbol.iterator]!=null?r=n.source[Symbol.iterator]():n.source[Symbol.asyncIterator]!=null&&(r=n.source[Symbol.asyncIterator]());let i=new g;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:u,value:w}=await L(r.next(),s?.signal);return u===!0?null:w}for(;i.byteLength<s.bytes;){let{value:u,done:w}=await L(r.next(),s?.signal);if(w===!0)throw new A("unexpected end of input");i.append(u)}let o=i.sublist(0,s.bytes);return i.consume(s.bytes),o},write:async(s,o)=>{o?.signal?.throwIfAborted(),s instanceof Uint8Array?await e.push(s,o):await e.push(s.subarray(),o)},unwrap:()=>{if(i.byteLength>0){let s=n.source;n.source=async function*(){t?.yieldBytes===!1?yield i:yield*i,yield*s}()}return n}}}var J=Math.pow(2,7),K=Math.pow(2,14),Y=Math.pow(2,21),V=Math.pow(2,28),_=Math.pow(2,35),O=Math.pow(2,42),M=Math.pow(2,49),a=128,f=127;function p(n){if(n<J)return 1;if(n<K)return 2;if(n<Y)return 3;if(n<V)return 4;if(n<_)return 5;if(n<O)return 6;if(n<M)return 7;if(Number.MAX_SAFE_INTEGER!=null&&n>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Z(n,t,e=0){switch(p(n)){case 8:t[e++]=n&255|a,n/=128;case 7:t[e++]=n&255|a,n/=128;case 6:t[e++]=n&255|a,n/=128;case 5:t[e++]=n&255|a,n/=128;case 4:t[e++]=n&255|a,n>>>=7;case 3:t[e++]=n&255|a,n>>>=7;case 2:t[e++]=n&255|a,n>>>=7;case 1:{t[e++]=n&255,n>>>=7;break}default:throw new Error("unreachable")}return t}function $(n,t,e=0){switch(p(n)){case 8:t.set(e++,n&255|a),n/=128;case 7:t.set(e++,n&255|a),n/=128;case 6:t.set(e++,n&255|a),n/=128;case 5:t.set(e++,n&255|a),n/=128;case 4:t.set(e++,n&255|a),n>>>=7;case 3:t.set(e++,n&255|a),n>>>=7;case 2:t.set(e++,n&255|a),n>>>=7;case 1:{t.set(e++,n&255),n>>>=7;break}default:throw new Error("unreachable")}return t}function Q(n,t){let e=n[t],r=0;if(r+=e&f,e<a||(e=n[t+1],r+=(e&f)<<7,e<a)||(e=n[t+2],r+=(e&f)<<14,e<a)||(e=n[t+3],r+=(e&f)<<21,e<a)||(e=n[t+4],r+=(e&f)*V,e<a)||(e=n[t+5],r+=(e&f)*_,e<a)||(e=n[t+6],r+=(e&f)*O,e<a)||(e=n[t+7],r+=(e&f)*M,e<a))return r;throw new RangeError("Could not decode varint")}function tt(n,t){let e=n.get(t),r=0;if(r+=e&f,e<a||(e=n.get(t+1),r+=(e&f)<<7,e<a)||(e=n.get(t+2),r+=(e&f)<<14,e<a)||(e=n.get(t+3),r+=(e&f)<<21,e<a)||(e=n.get(t+4),r+=(e&f)*V,e<a)||(e=n.get(t+5),r+=(e&f)*_,e<a)||(e=n.get(t+6),r+=(e&f)*O,e<a)||(e=n.get(t+7),r+=(e&f)*M,e<a))return r;throw new RangeError("Could not decode varint")}function P(n,t,e=0){return t==null&&(t=y(p(n))),t instanceof Uint8Array?Z(n,t,e):$(n,t,e)}function v(n,t=0){return n instanceof Uint8Array?Q(n,t):tt(n,t)}var F=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},N=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},E=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function rt(n,t={}){let e=G(n,t);t.maxDataLength!=null&&t.maxLengthLength==null&&(t.maxLengthLength=p(t.maxDataLength));let r=t?.lengthDecoder??v,i=t?.lengthEncoder??P;return{read:async s=>{let o=-1,u=new g;for(;;){u.append(await e.read({...s,bytes:1}));try{o=r(u)}catch(w){if(w instanceof RangeError)continue;throw w}if(o<0)throw new F("Invalid message length");if(t?.maxLengthLength!=null&&u.byteLength>t.maxLengthLength)throw new E("message length length too long");if(o>-1)break}if(t?.maxDataLength!=null&&o>t.maxDataLength)throw new N("message length too long");return e.read({...s,bytes:o})},write:async(s,o)=>{await e.write(new g(i(s.byteLength),s),o)},writeV:async(s,o)=>{let u=new g(...s.flatMap(w=>[i(w.byteLength),w]));await e.write(u,o)},unwrap:()=>e.unwrap()}}return z(nt);})(); | ||
return ItLengthPrefixedStream})); |
@@ -28,6 +28,4 @@ /** | ||
import { Uint8ArrayList } from 'uint8arraylist'; | ||
import type { AbortOptions } from 'abort-error'; | ||
import type { Duplex } from 'it-stream-types'; | ||
export interface AbortOptions { | ||
signal?: AbortSignal; | ||
} | ||
export interface LengthPrefixedStream<Stream = unknown> { | ||
@@ -34,0 +32,0 @@ /** |
@@ -45,3 +45,6 @@ /** | ||
// read one byte at a time until we can decode a varint | ||
lengthBuffer.append(await bytes.read(1, options)); | ||
lengthBuffer.append(await bytes.read({ | ||
...options, | ||
bytes: 1 | ||
})); | ||
try { | ||
@@ -69,3 +72,6 @@ dataLength = decodeLength(lengthBuffer); | ||
} | ||
return bytes.read(dataLength, options); | ||
return bytes.read({ | ||
...options, | ||
bytes: dataLength | ||
}); | ||
}, | ||
@@ -72,0 +78,0 @@ write: async (data, options) => { |
{ | ||
"name": "it-length-prefixed-stream", | ||
"version": "1.2.1", | ||
"version": "2.0.0", | ||
"description": "Read and write length-prefixed byte arrays over a duplex stream", | ||
@@ -139,2 +139,3 @@ "author": "Alex Potsides <alex@achingbrain.net>", | ||
"dependencies": { | ||
"abort-error": "^1.0.1", | ||
"it-byte-stream": "^1.0.0", | ||
@@ -141,0 +142,0 @@ "it-stream-types": "^2.0.2", |
@@ -30,8 +30,5 @@ /** | ||
import { InvalidDataLengthError, InvalidDataLengthLengthError, InvalidMessageLengthError } from './errors.js' | ||
import type { AbortOptions } from 'abort-error' | ||
import type { Duplex } from 'it-stream-types' | ||
export interface AbortOptions { | ||
signal?: AbortSignal | ||
} | ||
export interface LengthPrefixedStream <Stream = unknown> { | ||
@@ -88,3 +85,6 @@ /** | ||
// read one byte at a time until we can decode a varint | ||
lengthBuffer.append(await bytes.read(1, options)) | ||
lengthBuffer.append(await bytes.read({ | ||
...options, | ||
bytes: 1 | ||
})) | ||
@@ -118,3 +118,6 @@ try { | ||
return bytes.read(dataLength, options) | ||
return bytes.read({ | ||
...options, | ||
bytes: dataLength | ||
}) | ||
}, | ||
@@ -121,0 +124,0 @@ write: async (data, options?: AbortOptions) => { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
34216
0.03%381
2.14%5
25%+ Added
+ Added