OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-core-schemas / node_modules / compact-encoding / index.js

1 lines · javascript ref:
const e=require("b4a"),{BE:t}=require("./endian");exports.state=function(e=0,t=0,r=null){return{start:e,end:t,buffer:r}};const r=exports.raw=require("./raw"),n=exports.uint={preencode(e,t){e.end+=t<=252?1:t<=65535?3:t<=4294967295?5:9},encode(e,t){t<=252?o.encode(e,t):t<=65535?(e.buffer[e.start++]=253,d.encode(e,t)):t<=4294967295?(e.buffer[e.start++]=254,c.encode(e,t)):(e.buffer[e.start++]=255,i.encode(e,t))},decode(e){const t=o.decode(e);return t<=252?t:253===t?d.decode(e):254===t?c.decode(e):i.decode(e)}},o=exports.uint8={preencode(e,t){e.end+=1},encode(e,t){R(t),e.buffer[e.start++]=t},decode(e){if(e.start>=e.end)throw new Error("Out of bounds");return e.buffer[e.start++]}},d=exports.uint16={preencode(e,t){e.end+=2},encode(e,t){R(t),e.buffer[e.start++]=t,e.buffer[e.start++]=t>>>8},decode(e){if(e.end-e.start<2)throw new Error("Out of bounds");return e.buffer[e.start++]+256*e.buffer[e.start++]}},s=exports.uint24={preencode(e,t){e.end+=3},encode(e,t){R(t),e.buffer[e.start++]=t,e.buffer[e.start++]=t>>>8,e.buffer[e.start++]=t>>>16},decode(e){if(e.end-e.start<3)throw new Error("Out of bounds");return e.buffer[e.start++]+256*e.buffer[e.start++]+65536*e.buffer[e.start++]}},c=exports.uint32={preencode(e,t){e.end+=4},encode(e,t){R(t),e.buffer[e.start++]=t,e.buffer[e.start++]=t>>>8,e.buffer[e.start++]=t>>>16,e.buffer[e.start++]=t>>>24},decode(e){if(e.end-e.start<4)throw new Error("Out of bounds");return e.buffer[e.start++]+256*e.buffer[e.start++]+65536*e.buffer[e.start++]+16777216*e.buffer[e.start++]}},f=exports.uint40={preencode(e,t){e.end+=5},encode(e,t){R(t);const r=Math.floor(t/256);o.encode(e,t),c.encode(e,r)},decode(e){if(e.end-e.start<5)throw new Error("Out of bounds");return o.decode(e)+256*c.decode(e)}},u=exports.uint48={preencode(e,t){e.end+=6},encode(e,t){R(t);const r=Math.floor(t/65536);d.encode(e,t),c.encode(e,r)},decode(e){if(e.end-e.start<6)throw new Error("Out of bounds");return d.decode(e)+65536*c.decode(e)}},a=exports.uint56={preencode(e,t){e.end+=7},encode(e,t){R(t);const r=Math.floor(t/16777216);s.encode(e,t),c.encode(e,r)},decode(e){if(e.end-e.start<7)throw new Error("Out of bounds");return s.decode(e)+16777216*c.decode(e)}},i=exports.uint64={preencode(e,t){e.end+=8},encode(e,t){R(t);const r=Math.floor(t/4294967296);c.encode(e,t),c.encode(e,r)},decode(e){if(e.end-e.start<8)throw new Error("Out of bounds");return c.decode(e)+4294967296*c.decode(e)}},p=exports.int=k(n);exports.int8=k(o),exports.int16=k(d),exports.int24=k(s),exports.int32=k(c),exports.int40=k(f),exports.int48=k(u),exports.int56=k(a),exports.int64=k(i);const b=exports.biguint64={preencode(e,t){e.end+=8},encode(e,t){new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8).setBigUint64(0,t,!0),e.start+=8},decode(e){if(e.end-e.start<8)throw new Error("Out of bounds");const t=new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8).getBigUint64(0,!0);return e.start+=8,t}};exports.bigint64=q(b);const l=exports.biguint={preencode(e,t){let r=0;for(let e=t;e;e>>=64n)r++;n.preencode(e,r),e.end+=8*r},encode(e,t){let r=0;for(let e=t;e;e>>=64n)r++;n.encode(e,r);const o=new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8*r);for(let e=t,r=0;e;e>>=64n,r+=8)o.setBigUint64(r,BigInt.asUintN(64,e),!0);e.start+=8*r},decode(e){const t=n.decode(e);if(e.end-e.start<8*t)throw new Error("Out of bounds");const r=new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8*t);let o=0n;for(let e=t-1;e>=0;e--)o=(o<<64n)+r.getBigUint64(8*e,!0);return e.start+=8*t,o}};exports.bigint=q(l),exports.lexint=require("./lexint"),exports.float32={preencode(e,t){e.end+=4},encode(e,t){new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,4).setFloat32(0,t,!0),e.start+=4},decode(e){if(e.end-e.start<4)throw new Error("Out of bounds");const t=new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,4).getFloat32(0,!0);return e.start+=4,t}},exports.float64={preencode(e,t){e.end+=8},encode(e,t){new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8).setFloat64(0,t,!0),e.start+=8},decode(e){if(e.end-e.start<8)throw new Error("Out of bounds");const t=new DataView(e.buffer.buffer,e.start+e.buffer.byteOffset,8).getFloat64(0,!0);return e.start+=8,t}};const x=exports.buffer={preencode(e,t){t?y.preencode(e,t):e.end++},encode(e,t){t?y.encode(e,t):e.buffer[e.start++]=0},decode(e){const t=n.decode(e);if(0===t)return null;if(e.end-e.start<t)throw new Error("Out of bounds");return e.buffer.subarray(e.start,e.start+=t)}};function w(e,r){const o=e.BYTES_PER_ELEMENT;return{preencode(e,t){n.preencode(e,t.length),e.end+=t.byteLength},encode(e,o){n.encode(e,o.length);const d=new Uint8Array(o.buffer,o.byteOffset,o.byteLength);t&&r&&r(d),e.buffer.set(d,e.start),e.start+=o.byteLength},decode(d){const s=n.decode(d);let c=d.buffer.subarray(d.start,d.start+=s*o);if(c.byteLength!==s*o)throw new Error("Out of bounds");return c.byteOffset%o!==0&&(c=new Uint8Array(c)),t&&r&&r(c),new e(c.buffer,c.byteOffset,c.byteLength/o)}}}exports.binary={...x,preencode(e,t){"string"==typeof t?g.preencode(e,t):x.preencode(e,t)},encode(e,t){"string"==typeof t?g.encode(e,t):x.encode(e,t)}},exports.arraybuffer={preencode(e,t){n.preencode(e,t.byteLength),e.end+=t.byteLength},encode(e,t){n.encode(e,t.byteLength);const r=new Uint8Array(t);e.buffer.set(r,e.start),e.start+=t.byteLength},decode(e){const t=n.decode(e),r=new ArrayBuffer(t);return new Uint8Array(r).set(e.buffer.subarray(e.start,e.start+=t)),r}};const y=exports.uint8array=w(Uint8Array);function h(t){return{preencode(r,o){const d=e.byteLength(o,t);n.preencode(r,d),r.end+=d},encode(r,o){const d=e.byteLength(o,t);n.encode(r,d),e.write(r.buffer,o,r.start,t),r.start+=d},decode(r){const o=n.decode(r);if(r.end-r.start<o)throw new Error("Out of bounds");return e.toString(r.buffer,t,r.start,r.start+=o)},fixed:r=>({preencode(e){e.end+=r},encode(n,o){e.write(n.buffer,o,n.start,r,t),n.start+=r},decode(n){if(n.end-n.start<r)throw new Error("Out of bounds");return e.toString(n.buffer,t,n.start,n.start+=r)}})}}exports.uint16array=w(Uint16Array,e.swap16),exports.uint32array=w(Uint32Array,e.swap32),exports.int8array=w(Int8Array),exports.int16array=w(Int16Array,e.swap16),exports.int32array=w(Int32Array,e.swap32),exports.biguint64array=w(BigUint64Array,e.swap64),exports.bigint64array=w(BigInt64Array,e.swap64),exports.float32array=w(Float32Array,e.swap32),exports.float64array=w(Float64Array,e.swap64);const g=exports.string=exports.utf8=h("utf-8");exports.ascii=h("ascii"),exports.hex=h("hex"),exports.base64=h("base64"),exports.ucs2=exports.utf16le=h("utf16le"),exports.bool={preencode(e,t){e.end++},encode(e,t){e.buffer[e.start++]=t?1:0},decode(e){if(e.start>=e.end)throw Error("Out of bounds");return 1===e.buffer[e.start++]}};const O=exports.fixed=function(e){return{preencode(t,r){if(r.byteLength!==e)throw new Error("Incorrect buffer size");t.end+=e},encode(t,r){t.buffer.set(r,t.start),t.start+=e},decode(t){if(t.end-t.start<e)throw new Error("Out of bounds");return t.buffer.subarray(t.start,t.start+=e)}}};exports.fixed32=O(32),exports.fixed64=O(64),exports.array=function(e){return{preencode(t,r){n.preencode(t,r.length);for(let n=0;n<r.length;n++)e.preencode(t,r[n])},encode(t,r){n.encode(t,r.length);for(let n=0;n<r.length;n++)e.encode(t,r[n])},decode(t){const r=n.decode(t);if(r>1048576)throw new Error("Array is too big");const o=new Array(r);for(let n=0;n<r;n++)o[n]=e.decode(t);return o}}},exports.frame=function(e){const t=exports.state();return{preencode(t,r){const o=t.end;e.preencode(t,r),n.preencode(t,t.end-o)},encode(r,o){t.end=0,e.preencode(t,o),n.encode(r,t.end),e.encode(r,o)},decode(t){const r=t.end,o=n.decode(t);t.end=t.start+o;const d=e.decode(t);return t.start=t.end,t.end=r,d}}},exports.date={preencode(e,t){p.preencode(e,t.getTime())},encode(e,t){p.encode(e,t.getTime())},decode:(e,t)=>new Date(p.decode(e))},exports.json={preencode(e,t){g.preencode(e,JSON.stringify(t))},encode(e,t){g.encode(e,JSON.stringify(t))},decode:e=>JSON.parse(g.decode(e))},exports.ndjson={preencode(e,t){g.preencode(e,JSON.stringify(t)+"\n")},encode(e,t){g.encode(e,JSON.stringify(t)+"\n")},decode:e=>JSON.parse(g.decode(e))},exports.none={preencode(e,t){},encode(e,t){},decode:e=>null};const E={preencode(e,t){n.preencode(e,t.length);for(let r=0;r<t.length;r++)S.preencode(e,t[r])},encode(e,t){n.encode(e,t.length);for(let r=0;r<t.length;r++)S.encode(e,t[r])},decode(e){const t=[];let r=n.decode(e);for(;r-- >0;)t.push(S.decode(e));return t}},A={preencode(e,t){const r=Object.keys(t);n.preencode(e,r.length);for(const n of r)g.preencode(e,n),S.preencode(e,t[n])},encode(e,t){const r=Object.keys(t);n.encode(e,r.length);for(const n of r)g.encode(e,n),S.encode(e,t[n])},decode(e){let t=n.decode(e);const r={};for(;t-- >0;)r[g.decode(e)]=S.decode(e);return r}},L=[exports.none,exports.bool,exports.string,exports.buffer,exports.uint,exports.int,exports.float64,E,A,exports.date],S=exports.any={preencode(e,t){const r=V(t);n.preencode(e,r),L[r].preencode(e,t)},encode(e,t){const r=V(t);n.encode(e,r),L[r].encode(e,t)},decode(e){const t=n.decode(e);if(t>=L.length)throw new Error("Unknown type: "+t);return L[t].decode(e)}},U=exports.port=d,j=(e,t)=>({preencode(t,r){e.preencode(t,r.host),U.preencode(t,r.port)},encode(t,r){e.encode(t,r.host),U.encode(t,r.port)},decode:r=>({host:e.decode(r),family:t,port:U.decode(r)})}),B=exports.ipv4={preencode(e){e.end+=4},encode(e,t){const r=e.start+4;let n=0;for(;n<t.length;){let r,o=0;for(;n<t.length&&46!==(r=t.charCodeAt(n++));)o=10*o+(r-48);e.buffer[e.start++]=o}e.start=r},decode(e){if(e.end-e.start<4)throw new Error("Out of bounds");return e.buffer[e.start++]+"."+e.buffer[e.start++]+"."+e.buffer[e.start++]+"."+e.buffer[e.start++]}};exports.ipv4Address=j(B,4);const D=exports.ipv6={preencode(e){e.end+=16},encode(e,t){const r=e.start+16;let n=0,o=null;for(;n<t.length;){let r,d=0;for(;n<t.length&&58!==(r=t.charCodeAt(n++));)r>=48&&r<=57?d=16*d+(r-48):r>=65&&r<=70?d=16*d+(r-65+10):r>=97&&r<=102&&(d=16*d+(r-97+10));e.buffer[e.start++]=d>>>8,e.buffer[e.start++]=d,n<t.length&&58===t.charCodeAt(n)&&(n++,o=e.start)}if(null!==o){const t=r-e.start;e.buffer.copyWithin(o+t,o).fill(0,o,o+t)}e.start=r},decode(e){if(e.end-e.start<16)throw new Error("Out of bounds");return(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)+":"+(256*e.buffer[e.start++]+e.buffer[e.start++]).toString(16)}};exports.ipv6Address=j(D,6);const m=exports.ip={preencode(e,t){const r=t.includes(":")?6:4;o.preencode(e,r),4===r?B.preencode(e):D.preencode(e)},encode(e,t){const r=t.includes(":")?6:4;o.encode(e,r),4===r?B.encode(e,t):D.encode(e,t)},decode:e=>4===o.decode(e)?B.decode(e):D.decode(e)};exports.ipAddress={preencode(e,t){m.preencode(e,t.host),U.preencode(e,t.port)},encode(e,t){m.encode(e,t.host),U.encode(e,t.port)},decode(e){const t=o.decode(e);return{host:4===t?B.decode(e):D.decode(e),family:t,port:U.decode(e)}}};const N=exports.record=function(e,t){return{preencode(r,o){const d=Object.keys(o);n.preencode(r,d.length);for(const n of d)e.preencode(r,n),t.preencode(r,o[n])},encode(r,o){const d=Object.keys(o);n.encode(r,d.length);for(const n of d)e.encode(r,n),t.encode(r,o[n])},decode(r){const o=Object.create(null),d=n.decode(r);for(let n=0;n<d;n++)o[e.decode(r)]=t.decode(r);return o}}};function V(t){if(null==t)return 0;if("boolean"==typeof t)return 1;if("string"==typeof t)return 2;if(e.isBuffer(t))return 3;if("number"==typeof t)return Number.isInteger(t)?t>=0?4:5:6;if(Array.isArray(t))return 7;if(t instanceof Date)return 9;if("object"==typeof t)return 8;throw new Error("Unsupported type for "+t)}function I(e){switch(e){case"ascii":return r.ascii;case"utf-8":case"utf8":return r.utf8;case"hex":return r.hex;case"base64":return r.base64;case"utf16-le":case"utf16le":case"ucs-2":case"ucs2":return r.ucs2;case"ndjson":return r.ndjson;case"json":return r.json;default:return r.binary}}function F(e){let t=null,n=null;return{preencode(r,o){t=o,n=e.encode(o),r.end+=n.byteLength},encode(o,d){r.encode(o,d===t?n:e.encode(d)),t=n=null},decode:t=>e.decode(r.decode(t))}}function J(e){return{preencode(t,r){t.end+=e.encodingLength(r)},encode(t,r){e.encode(r,t.buffer,t.start),t.start+=e.encode.bytes},decode(t){const r=e.decode(t.buffer,t.start,t.end);return t.start+=e.decode.bytes,r}}}function k(e){return{preencode(t,r){e.preencode(t,M(r))},encode(t,r){e.encode(t,M(r))},decode:t=>v(e.decode(t))}}function v(e){return 0===e?e:1&e?-(e+1)/2:e/2}function M(e){return e<0?2*-e-1:0===e?0:2*e}function q(e){return{preencode(t,r){e.preencode(t,C(r))},encode(t,r){e.encode(t,C(r))},decode:t=>T(e.decode(t))}}function T(e){return 0n===e?e:0n==(1n&e)?e/2n:-(e+1n)/2n}function C(e){return e<0n?2n*-e-1n:0n===e?0n:2n*e}function R(e){if(e>=0==0)throw new Error("uint must be positive")}exports.stringRecord=N(g,g),exports.from=function(e){return"string"==typeof e?I(e):e.preencode?e:e.encodingLength?J(e):F(e)},exports.encode=function(t,r){const n=exports.state();return t.preencode(n,r),n.buffer=e.allocUnsafe(n.end),t.encode(n,r),n.buffer},exports.decode=function(e,t){return e.decode(exports.state(0,t.byteLength,t))};