it-handshake
Version:
Create handshakes for binary protocols with iterable streams
4 lines (3 loc) • 10.1 kB
JavaScript
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.ItHandshake = factory()}(typeof self !== 'undefined' ? self : this, function () {
"use strict";var ItHandshake=(()=>{var A=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var I=(s,t)=>{for(var e in t)A(s,e,{get:t[e],enumerable:!0})},R=(s,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of T(t))!j.call(s,r)&&r!==e&&A(s,r,{get:()=>t[r],enumerable:!(n=P(t,r))||n.enumerable});return s};var _=s=>R(A({},"__esModule",{value:!0}),s);var q={};I(q,{handshake:()=>M});function p(s){return globalThis.Buffer!=null?new Uint8Array(s.buffer,s.byteOffset,s.byteLength):s}function c(s=0){return globalThis.Buffer?.alloc!=null?p(globalThis.Buffer.alloc(s)):new Uint8Array(s)}function m(s=0){return globalThis.Buffer?.allocUnsafe!=null?p(globalThis.Buffer.allocUnsafe(s)):new Uint8Array(s)}function x(s,t){t==null&&(t=s.reduce((r,i)=>r+i.length,0));let e=m(t),n=0;for(let r of s)e.set(r,n),n+=r.length;return p(e)}function V(s,t){if(s===t)return!0;if(s.byteLength!==t.byteLength)return!1;for(let e=0;e<s.byteLength;e++)if(s[e]!==t[e])return!1;return!0}var B=Symbol.for("@achingbrain/uint8arraylist");function k(s,t){if(t==null||t<0)throw new RangeError("index is out of bounds");let e=0;for(let n of s){let r=e+n.byteLength;if(t<r)return{buf:n,index:t-e};e=r}throw new RangeError("index is out of bounds")}function U(s){return!!s?.[B]}var b=class{constructor(...t){Object.defineProperty(this,B,{value:!0}),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 n of t)if(n instanceof Uint8Array)e+=n.byteLength,this.bufs.push(n);else if(U(n))e+=n.byteLength,this.bufs.push(...n.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 n of t.reverse())if(n instanceof Uint8Array)e+=n.byteLength,this.bufs.unshift(n);else if(U(n))e+=n.byteLength,this.bufs.unshift(...n.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 n=k(this.bufs,t);n.buf[n.index]=e}write(t,e=0){if(t instanceof Uint8Array)for(let n=0;n<t.length;n++)this.set(e+n,t[n]);else if(U(t))for(let n=0;n<t.length;n++)this.set(e+n,t.get(n));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:n,length:r}=this._subList(t,e);return x(n,r)}subarray(t,e){let{bufs:n,length:r}=this._subList(t,e);return n.length===1?n[0]:x(n,r)}sublist(t,e){let{bufs:n,length:r}=this._subList(t,e),i=new b;return i.length=r,i.bufs=n,i}_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 n=[],r=0;for(let i=0;i<this.bufs.length;i++){let a=this.bufs[i],f=r,h=f+a.byteLength;if(r=h,t>=h)continue;let g=t>=f&&t<h,l=e>f&&e<=h;if(g&&l){if(t===f&&e===h){n.push(a);break}let o=t-f;n.push(a.subarray(o,o+(e-t)));break}if(g){if(t===0){n.push(a);continue}n.push(a.subarray(t-f));continue}if(l){if(e===h){n.push(a);break}n.push(a.subarray(0,e-f));break}n.push(a)}return{bufs:n,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 n=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 r=n.byteLength;if(r===0)throw new TypeError("search must be at least 1 byte long");let i=256,a=new Int32Array(i);for(let o=0;o<i;o++)a[o]=-1;for(let o=0;o<r;o++)a[n[o]]=o;let f=a,h=this.byteLength-n.byteLength,g=n.byteLength-1,l;for(let o=e;o<=h;o+=l){l=0;for(let w=g;w>=0;w--){let L=this.get(o+w);if(n[w]!==L){l=Math.max(1,w-f[L]);break}}if(l===0)return o}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 n=m(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,e),this.write(n,t)}getInt16(t,e){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,e)}setInt16(t,e,n){let r=c(2);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt16(0,e,n),this.write(r,t)}getInt32(t,e){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,e)}setInt32(t,e,n){let r=c(4);new DataView(r.buffer,r.byteOffset,r.byteLength).setInt32(0,e,n),this.write(r,t)}getBigInt64(t,e){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,e)}setBigInt64(t,e,n){let r=c(8);new DataView(r.buffer,r.byteOffset,r.byteLength).setBigInt64(0,e,n),this.write(r,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 n=m(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,e),this.write(n,t)}getUint16(t,e){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,e)}setUint16(t,e,n){let r=c(2);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint16(0,e,n),this.write(r,t)}getUint32(t,e){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,e)}setUint32(t,e,n){let r=c(4);new DataView(r.buffer,r.byteOffset,r.byteLength).setUint32(0,e,n),this.write(r,t)}getBigUint64(t,e){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,e)}setBigUint64(t,e,n){let r=c(8);new DataView(r.buffer,r.byteOffset,r.byteLength).setBigUint64(0,e,n),this.write(r,t)}getFloat32(t,e){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,e)}setFloat32(t,e,n){let r=c(4);new DataView(r.buffer,r.byteOffset,r.byteLength).setFloat32(0,e,n),this.write(r,t)}getFloat64(t,e){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,e)}setFloat64(t,e,n){let r=c(8);new DataView(r.buffer,r.byteOffset,r.byteLength).setFloat64(0,e,n),this.write(r,t)}equals(t){if(t==null||!(t instanceof b)||t.bufs.length!==this.bufs.length)return!1;for(let e=0;e<this.bufs.length;e++)if(!V(this.bufs[e],t.bufs[e]))return!1;return!0}static fromUint8Arrays(t,e){let n=new b;return n.bufs=t,e==null&&(e=t.reduce((r,i)=>r+i.byteLength,0)),n.length=e,n}};function O(s){let t=async function*(){let e=yield,n=new b;for await(let r of s){if(e==null){n.append(r),e=yield n,n=new b;continue}for(n.append(r);n.length>=e;){let i=n.sublist(0,e);if(n.consume(e),e=yield i,e==null){n.length>0&&(e=yield n,n=new b);break}}}if(e!=null)throw Object.assign(new Error(`stream ended before ${e} bytes became available`),{code:"ERR_UNDER_READ",buffer:n})}();return t.next(),t}var v=class{constructor(t){if(!(t>0)||t-1&t)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(t),this.mask=t-1,this.top=0,this.btm=0,this.next=null}push(t){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=t,this.top=this.top+1&this.mask,!0)}shift(){let t=this.buffer[this.btm];if(t!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,t}isEmpty(){return this.buffer[this.btm]===void 0}},y=class{constructor(t={}){this.hwm=t.splitLimit??16,this.head=new v(this.hwm),this.tail=this.head,this.size=0}calculateSize(t){return t?.byteLength!=null?t.byteLength:1}push(t){if(t?.value!=null&&(this.size+=this.calculateSize(t.value)),!this.head.push(t)){let e=this.head;this.head=e.next=new v(2*this.head.buffer.length),this.head.push(t)}}shift(){let t=this.tail.shift();if(t===void 0&&this.tail.next!=null){let e=this.tail.next;this.tail.next=null,this.tail=e,t=this.tail.shift()}return t?.value!=null&&(this.size-=this.calculateSize(t.value)),t}isEmpty(){return this.head.isEmpty()}};function N(s={}){return z(e=>{let n=e.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},s)}function z(s,t){t=t??{};let e=t.onEnd,n=new y,r,i,a,f=async()=>n.isEmpty()?a?{done:!0}:await new Promise((u,E)=>{i=S=>{i=null,n.push(S);try{u(s(n))}catch(F){E(F)}return r}}):s(n),h=u=>i!=null?i(u):(n.push(u),r),g=u=>(n=new y,i!=null?i({error:u}):(n.push({error:u}),r)),l=u=>{if(a)return r;if(t?.objectMode!==!0&&u?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return h({done:!1,value:u})},o=u=>a?r:(a=!0,u!=null?g(u):h({done:!0})),w=()=>(n=new y,o(),{done:!0}),L=u=>(o(u),{done:!0});if(r={[Symbol.asyncIterator](){return this},next:f,return:w,throw:L,push:l,end:o,get readableLength(){return n.size}},e==null)return r;let d=r;return r={[Symbol.asyncIterator](){return this},next(){return d.next()},throw(u){return d.throw(u),e!=null&&(e(u),e=void 0),{done:!0}},return(){return d.return(),e!=null&&(e(),e=void 0),{done:!0}},push:l,end(u){return d.end(u),e!=null&&(e(u),e=void 0),r},get readableLength(){return d.readableLength}},r}function D(){let s={};return s.promise=new Promise((t,e)=>{s.resolve=t,s.reject=e}),s}function M(s){let t=N(),e=O(s.source),n=D(),r,i=s.sink(async function*(){yield*t,yield*await n.promise}());return i.catch(f=>{r=f}),{reader:e,writer:t,stream:{sink:async f=>{if(r!=null){await Promise.reject(r);return}n.resolve(f),await i},source:e},rest:()=>t.end(),write:t.push,read:async()=>{let f=await e.next();if(f.value!=null)return f.value}}}return _(q);})();
return ItHandshake}));