Comparing version 1.4.1 to 1.5.0
@@ -200,2 +200,3 @@ let decoder | ||
position = bundledStrings.postBundlePosition; | ||
bundledStrings = null; | ||
} | ||
@@ -937,15 +938,20 @@ | ||
} | ||
currentExtensions[25] = (id) => { | ||
return stringRefs[id] | ||
} | ||
currentExtensions[256] = (read) => { | ||
stringRefs = [] | ||
try { | ||
return read() | ||
} finally { | ||
stringRefs = null | ||
} | ||
} | ||
currentExtensions[256].handlesRead = true | ||
// The following code is an incomplete implementation of http://cbor.schmorp.de/stringref | ||
// the real thing would need to implemennt more logic to populate the stringRefs table and | ||
// maintain a stack of stringRef "namespaces". | ||
// | ||
// currentExtensions[25] = (id) => { | ||
// return stringRefs[id] | ||
// } | ||
// currentExtensions[256] = (read) => { | ||
// stringRefs = [] | ||
// try { | ||
// return read() | ||
// } finally { | ||
// stringRefs = null | ||
// } | ||
// } | ||
// currentExtensions[256].handlesRead = true | ||
currentExtensions[28] = (read) => { | ||
@@ -952,0 +958,0 @@ // shareable http://cbor.schmorp.de/value-sharing (for structured clones) |
@@ -1,140 +0,2 @@ | ||
(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e=e||self,t(e.CBOR={}))})(this,function(e){"use strict";var t=Math.exp,s=Math.log,n=Math.round;function a(){try{let e=r();if(F){if(B>=F.postBundlePosition){let e=new Error("Unexpected bundle position");throw e.incomplete=!0,e}// bundled strings to skip past | ||
B=F.postBundlePosition}if(B==V)// finished reading this source, cleanup references | ||
T=null,x=null,Y&&(Y=null);else if(B>V){// over read | ||
let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}else if(!X)throw new Error("Data read, but end of buffer not reached");// else more to read, but we are reading sequentially, so don't clear source yet | ||
return e}catch(e){throw R(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function r(){let e=x[B++],t=e>>5;if(e&=31,23<e)switch(e){case 24:e=x[B++];break;case 25:if(7==t)return p();e=W.getUint16(B),B+=2;break;case 26:if(7==t){let e=W.getFloat32(B);if(2<q.useFloat32){// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved | ||
let t=fe[(127&x[B])<<1|x[B+1]>>7];return B+=4,(t*e+(0<e?.5:-.5)>>0)/t}return B+=4,e}e=W.getUint32(B),B+=4;break;case 27:if(7==t){let e=W.getFloat64(B);return B+=8,e}if(1<t){if(0<W.getUint32(B))throw new Error("JavaScript does not support arrays, maps, or strings with length over 4294967295");e=W.getUint32(B+4)}else q.int64AsNumber?(e=4294967296*W.getUint32(B),e+=W.getUint32(B+4)):e=W.getBigUint64(B);B+=8;break;case 31:// indefinite length | ||
switch(t){case 2:// byte string | ||
case 3:// text string | ||
throw new Error("Indefinite length not supported for byte or text strings");case 4:// array | ||
let e,s=[],n=0;for(;(e=r())!=w;)s[n++]=e;return 4==t?s:3==t?s.join(""):Buffer.concat(s);case 5:// map | ||
let a;if(q.mapsAsObjects){let e={};if(q.keyMap)for(;(a=r())!=w;)e[o(q.decodeKey(a))]=r();else for(;(a=r())!=w;)e[o(a)]=r();return e}else{z&&(q.mapsAsObjects=!0,z=!1);let e=new Map;if(q.keyMap)for(;(a=r())!=w;)e.set(q.decodeKey(a),r());else for(;(a=r())!=w;)e.set(a,r());return e}case 7:return w;default:throw new Error("Invalid major type for indefinite length "+t);}default:throw new Error("Unknown token "+e);}switch(t){case 0:// positive int | ||
return e;case 1:// negative int | ||
return~e;case 2:// buffer | ||
return l(e);case 3:// string | ||
if(H>=B)return K.slice(B-G,(B+=e)-G);if(0==H&&140>V&&32>e){// for small blocks, avoiding the overhead of the extract call is helpful | ||
let t=16>e?c(e):u(e);if(null!=t)return t}return te(e);case 4:// array | ||
let s=Array(e);//if (currentDecoder.keyMap) for (let i = 0; i < token; i++) array[i] = currentDecoder.decodeKey(read()) | ||
//else | ||
for(let t=0;t<e;t++)s[t]=r();return s;case 5:// map | ||
if(q.mapsAsObjects){let t={};if(q.keyMap)for(let s=0;s<e;s++)t[o(q.decodeKey(r()))]=r();else for(let s=0;s<e;s++)t[o(r())]=r();return t}else{z&&(q.mapsAsObjects=!0,z=!1);let t=new Map;if(q.keyMap)for(let s=0;s<e;s++)t.set(q.decodeKey(r()),r());else for(let s=0;s<e;s++)t.set(r(),r());return t}case 6:// extension | ||
if(e>=D){let t=T[8191&e];// check record structures first | ||
// At some point we may provide an option for dynamic tag assignment with a range like token >= 8 && (token < 16 || (token > 0x80 && token < 0xc0) || (token > 0x130 && token < 0x4000)) | ||
if(t)return t.read||(t.read=i(t)),t.read();if(65536>e){if(e==P)// we do a special check for this so that we can keep the currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements) | ||
return oe(r());if(e==L){let e=m(),t=r();for(let s=2;s<e;s++)oe([t++,r()]);return r()}if(e==D)return y();if(q.getShared&&(b(),t=T[8191&e],t))return t.read||(t.read=i(t)),t.read()}}let n=J[e];if(n)return n.handlesRead?n(r):n(r());else{let t=r();for(let s,n=0;n<$.length;n++)if(s=$[n](e,t),void 0!==s)return s;return new ie(t,e)}case 7:// fixed value | ||
switch(e){case 20:return!1;case 21:return!0;case 22:return null;case 23:return;// undefined | ||
case 31:default:let t=(N||g())[e];if(void 0!==t)return t;throw new Error("Unknown token "+e);}default:// negative int | ||
if(isNaN(e)){let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}throw new Error("Unknown CBOR token "+e);}}function i(e){function t(){// get the array size from the header | ||
let e=x[B++];//let majorType = token >> 5 | ||
if(e&=31,23<e)switch(e){case 24:e=x[B++];break;case 25:e=W.getUint16(B),B+=2;break;case 26:e=W.getUint32(B),B+=4;break;default:throw new Error("Expected array header, but got "+x[B-1]);}// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function | ||
let t=this.compiledReader;// first look to see if we have the fast compiled function | ||
for(;t;){// we have a fast compiled object literal reader | ||
if(t.propertyCount===e)return t(r);// with the right length, so we use it | ||
t=t.next}if(3<=this.slowReads++){// create a fast compiled reader | ||
let s=this.length==e?this:this.slice(0,e);return t=q.keyMap?new Function("r","return {"+s.map(e=>q.decodeKey(e)).map(e=>ee.test(e)?o(e)+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"):new Function("r","return {"+s.map(e=>ee.test(e)?o(e)+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}"),this.compiledReader&&(t.next=this.compiledReader),t.propertyCount=e,this.compiledReader=t,t(r)}let s={};if(q.keyMap)for(let t=0;t<e;t++)s[o(q.decodeKey(this[t]))]=r();else for(let t=0;t<e;t++)s[o(this[t])]=r();return s}return e.slowReads=0,t}function o(e){return"__proto__"===e?"__proto_":e}function d(e){let t;if(16>e&&(t=c(e)))return t;if(64<e&&C)return C.decode(x.subarray(B,B+=e));const s=B+e,n=[];for(t="";B<s;){const e=x[B++];if(0==(128&e))n.push(e);else if(192==(224&e)){// 2 bytes | ||
const t=63&x[B++];n.push((31&e)<<6|t)}else if(224==(240&e)){// 3 bytes | ||
const t=63&x[B++],s=63&x[B++];n.push((31&e)<<12|t<<6|s)}else if(240==(248&e)){// 4 bytes | ||
const t=63&x[B++],s=63&x[B++],a=63&x[B++];let r=(7&e)<<18|t<<12|s<<6|a;65535<r&&(r-=65536,n.push(55296|1023&r>>>10),r=56320|1023&r),n.push(r)}else n.push(e);4096<=n.length&&(t+=se.apply(String,n),n.length=0)}return 0<n.length&&(t+=se.apply(String,n)),t}function u(e){let t=B,s=Array(e);for(let n=0;n<e;n++){const e=x[B++];if(0<(128&e))return void(B=t);s[n]=e}return se.apply(String,s)}function c(t){if(4>t){if(!(2>t)){let e=x[B++],s=x[B++];if(0<(128&e)||0<(128&s))return void(B-=2);if(3>t)return se(e,s);let n=x[B++];return 0<(128&n)?void(B-=3):se(e,s,n)}if(0===t)return"";else{let e=x[B++];return 1<(128&e)?void(B-=1):se(e)}}else{let s=x[B++],a=x[B++],r=x[B++],u=x[B++];if(0<(128&s)||0<(128&a)||0<(128&r)||0<(128&u))return void(B-=4);if(6>t){if(4===t)return se(s,a,r,u);else{let t=x[B++];return 0<(128&t)?void(B-=5):se(s,a,r,u,t)}}else if(8>t){let n=x[B++],e=x[B++];if(0<(128&n)||0<(128&e))return void(B-=6);if(7>t)return se(s,a,r,u,n,e);let i=x[B++];return 0<(128&i)?void(B-=7):se(s,a,r,u,n,e,i)}else{let d=x[B++],e=x[B++],c=x[B++],p=x[B++];if(0<(128&d)||0<(128&e)||0<(128&c)||0<(128&p))return void(B-=8);if(10>t){if(8===t)return se(s,a,r,u,d,e,c,p);else{let t=x[B++];return 0<(128&t)?void(B-=9):se(s,a,r,u,d,e,c,p,t)}}else if(12>t){let n=x[B++],i=x[B++];if(0<(128&n)||0<(128&i))return void(B-=10);if(11>t)return se(s,a,r,u,d,e,c,p,n,i);let o=x[B++];return 0<(128&o)?void(B-=11):se(s,a,r,u,d,e,c,p,n,i,o)}else{let f=x[B++],i=x[B++],g=x[B++],h=x[B++];if(0<(128&f)||0<(128&i)||0<(128&g)||0<(128&h))return void(B-=12);if(!(14>t)){let l=x[B++],y=x[B++];if(0<(128&l)||0<(128&y))return void(B-=14);if(15>t)return se(s,a,r,u,d,e,c,p,f,i,g,h,l,y);let n=x[B++];return 0<(128&n)?void(B-=15):se(s,a,r,u,d,e,c,p,f,i,g,h,l,y,n)}if(12===t)return se(s,a,r,u,d,e,c,p,f,i,g,h);else{let t=x[B++];return 0<(128&t)?void(B-=13):se(s,a,r,u,d,e,c,p,f,i,g,h,t)}}}}}function l(e){return q.copyBuffers?// specifically use the copying slice (not the node one) | ||
Uint8Array.prototype.slice.call(x,B,B+=e):x.subarray(B,B+=e)}function p(){let e=x[B++],t=x[B++],s=(127&e)>>2;if(31===s)// specials | ||
return t||3&e?NaN:128&e?-Infinity:1/0;if(0===s){// sub-normals | ||
// significand with 10 fractional bits and divided by 2^14 | ||
let s=((3&e)<<8|t)/16777216;return 128&e?-s:s}return ae[3]=128&e|// sign bit | ||
(s>>1)+56,ae[2]=(7&e)<<5|// last exponent bit and first two mantissa bits | ||
t>>3,ae[1]=t<<5,ae[0]=0,ne[0]}function f(e,t){return"string"==typeof e?e+t:e instanceof Array?e.concat(t):Object.assign({},e,t)}function g(){if(!N)if(q.getShared)b();else throw new Error("No packed values available");return N}function h(e,t){let s="get"+e.name.slice(0,-5);"function"!=typeof e&&(e=null);let n=e.BYTES_PER_ELEMENT;for(let a=0;2>a;a++){if(!a&&1==n)continue;let r=2==n?1:4==n?2:3;J[a?t:t-4]=1==n||a==ce?s=>{if(!e)throw new Error("Could not find typed array for code "+t);// we have to always slice/copy here to get a new ArrayBuffer that is word/byte aligned | ||
return new e(Uint8Array.prototype.slice.call(s,0).buffer)}:n=>{if(!e)throw new Error("Could not find typed array for code "+t);let o=new DataView(n.buffer,n.byteOffset,n.byteLength),d=n.length>>r,u=new e(d),c=o[s];for(let e=0;e<d;e++)u[e]=c.call(o,e<<r,a);return u}}}function y(){let e=m(),t=B+r();for(let t,s=2;s<e;s++)// skip past bundles that were already read | ||
// this will increment position, so must add to position afterwards | ||
t=m(),B+=t;let s=B;return B=t,F=[d(m()),d(m())],F.position0=0,F.position1=0,F.postBundlePosition=B,B=s,r()}function m(){let e=31&x[B++];return 23<e&&(24===e?e=x[B++]:25===e?(e=W.getUint16(B),B+=2):26===e?(e=W.getUint32(B),B+=4):void 0),e}function b(){if(q.getShared){let e=k(()=>(x=null,q.getShared()))||{},t=e.structures||[];q.sharedVersion=e.version,N=q.sharedValues=e.packedValues,!0===T?q.structures=T=t:T.splice.apply(T,[0,t.length].concat(t))}}function k(e){let t=V,s=B,n=G,a=H,r=K,i=Y,o=F,d=new Uint8Array(x.slice(0,V)),u=T,c=q,l=X,p=e();return V=t,B=s,G=n,H=a,K=r,Y=i,F=o,x=d,X=l,T=u,q=c,W=new DataView(x.buffer,x.byteOffset,x.byteLength),p}function R(){x=null,Y=null,T=null}function O(e){J[e.tag]=e.decode}function M(e){24>e?Ue[Ae++]=128|e:256>e?(Ue[Ae++]=152,Ue[Ae++]=e):65536>e?(Ue[Ae++]=153,Ue[Ae++]=e>>8,Ue[Ae++]=255&e):(Ue[Ae++]=154,ve.setUint32(Ae,e),Ae+=4)}function _(e,t){switch(typeof e){case"string":if(3<e.length){if(-1<t.objectMap[e]||t.values.length>=t.maxValues)return;let s=t.get(e);if(s)2==++s.count&&t.values.push(e);else if(t.set(e,{count:1}),t.samplingPackedValues){let s=t.samplingPackedValues.get(e);s?s.count++:t.samplingPackedValues.set(e,{count:1})}}break;case"object":if(e)if(e instanceof Array)for(let s=0,n=e.length;s<n;s++)_(e[s],t);else{let n=!t.encoder.useRecords;for(var s in e)e.hasOwnProperty(s)&&(n&&_(s,t),_(e[s],t))}break;case"function":console.log(e);}}function S(e,t){// the big endian equivalents are 4 less | ||
return!Pe&&1<t&&(e-=4),{tag:e,encode:function s(e,t){let n=e.byteLength,a=e.byteOffset||0,r=e.buffer||e;t(Oe?Buffer.from(r,a,n):new Uint8Array(r,a,n))}}}function E(e,t){let s=e.byteLength;// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself, | ||
// must wrap it to set it. | ||
24>s?Ue[Ae++]=64+s:256>s?(Ue[Ae++]=88,Ue[Ae++]=s):65536>s?(Ue[Ae++]=89,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=90,ve.setUint32(Ae,s),Ae+=4),Ae+s>=Ue.length&&t(Ae+s),Ue.set(e.buffer?e:new Uint8Array(e),Ae),Ae+=s}function U(e,t){// insert the ids that need to be referenced for structured clones | ||
let s,n=2*t.length,a=e.length-n;t.sort((e,t)=>e.offset>t.offset?1:-1);for(let s,n=0;n<t.length;n++){s=t[n],s.id=n;for(let t of s.references)e[t++]=n>>8,e[t]=255&n}for(;s=t.pop();){let t=s.offset;e.copyWithin(t+n,t,a),n-=2;let r=t+n;// http://cbor.schmorp.de/value-sharing | ||
e[r++]=216,e[r++]=28,a=t}return e}function v(e,t){ve.setUint32(Ce.position+e,Ae-Ce.position-e+1);// the offset to bundle | ||
let s=Ce;Ce=null,t(s[0]),t(s[1])}function*I(e,t){const s=new Be(t);for(const n of e)yield s.encode(n)}async function*A(e,t){const s=new Be(t);for await(const n of e)yield s.encode(n)}/** | ||
* Given an Iterable/Iterator input which yields buffers, returns an IterableIterator which yields sync decoded objects | ||
* Or, given an Async Iterable/Iterator which yields promises resolving in buffers, returns an AsyncIterableIterator. | ||
* @param {Iterable|Iterator|AsyncIterable|AsyncIterableIterator} bufferIterator | ||
* @param {object} [options] - Decoder options | ||
* @returns {IterableIterator|Promise.<AsyncIterableIterator} | ||
*/let C;try{C=new TextDecoder}catch(e){}let x,V,B=0;const L=57342,P=57343,D=57337,j=6,w={};let T,K,F,Y,N,W,z,q={},G=0,H=0,J=[],$=[],Q={useRecords:!1,mapsAsObjects:!0},X=!1;class Z{constructor(e){if(e&&((e.keyMap||e._keyMap)&&!e.useRecords&&(e.useRecords=!1,e.mapsAsObjects=!0),!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.getStructures&&(e.getShared=e.getStructures),e.getShared&&!e.structures&&((e.structures=[]).uninitialized=!0),e.keyMap))// this is what we use to denote an uninitialized structures | ||
{this.mapKey=new Map;for(let[t,s]of Object.entries(e.keyMap))this.mapKey.set(s,t)}Object.assign(this,e)}/* | ||
decodeKey(key) { | ||
return this.keyMap | ||
? Object.keys(this.keyMap)[Object.values(this.keyMap).indexOf(key)] || key | ||
: key | ||
} | ||
*/decodeKey(e){return this.keyMap?this.mapKey.get(e)||e:e}encodeKey(e){return this.keyMap&&this.keyMap.hasOwnProperty(e)?this.keyMap[e]:e}encodeKeys(e){if(!this._keyMap)return e;let t=new Map;for(let[s,n]of Object.entries(e))t.set(this._keyMap.hasOwnProperty(s)?this._keyMap[s]:s,n);return t}decodeKeys(e){if(!this._keyMap||"Map"!=e.constructor.name)return e;if(!this._mapKey){this._mapKey=new Map;for(let[e,t]of Object.entries(this._keyMap))this._mapKey.set(t,e)}let t={};//map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v) | ||
return e.forEach((e,s)=>t[o(this._mapKey.has(s)?this._mapKey.get(s):s)]=e),t}mapDecode(e,t){let s=this.decode(e);if(this._keyMap)//Experiemntal support for Optimised KeyMap decoding | ||
switch(s.constructor.name){case"Array":return s.map(e=>this.decodeKeys(e));//case 'Map': return this.decodeKeys(res) | ||
}return s}decode(e,t){if(x)// re-entrant execution, save the state and restore it after we do this decode | ||
return k(()=>(R(),this?this.decode(e,t):Z.prototype.decode.call(Q,e,t)));V=-1<t?t:e.length,B=0,H=0,K=null,F=null,x=e;// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend | ||
// technique for getting data from a database where it can be copied into an existing buffer instead of creating | ||
// new ones | ||
try{W=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){if(x=null,e instanceof Uint8Array)throw t;throw new Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof Z){if(q=this,N=this.sharedValues&&(this.pack?Array(this.maxPrivatePackedValues||16).concat(this.sharedValues):this.sharedValues),this.structures)return T=this.structures,a();(!T||0<T.length)&&(T=[])}else q=Q,(!T||0<T.length)&&(T=[]),N=null;return a()}decodeMultiple(e,t){let s,n=0;try{let r=e.length;X=!0;let i=this?this.decode(e,r):ge.decode(e,r);if(t){if(!1===t(i))return;for(;B<r;)if(n=B,!1===t(a()))return}else{for(s=[i];B<r;)n=B,s.push(a());return s}}catch(e){throw e.lastPosition=n,e.values=s,e}finally{X=!1,R()}}}const ee=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;let te=d,se=String.fromCharCode,ne=new Float32Array(1),ae=new Uint8Array(ne.buffer,0,4),re=Array(4096);class ie{constructor(e,t){this.value=e,this.tag=t}}J[0]=e=>new Date(e),J[1]=e=>new Date(n(1e3*e)),J[2]=e=>{// bigint extension | ||
let t=BigInt(0);for(let s=0,n=e.byteLength;s<n;s++)t=BigInt(e[s])+t<<BigInt(8);return t},J[3]=e=>BigInt(-1)-J[2](e),J[4]=e=>+(e[1]+"e"+e[0]),J[5]=e=>e[1]*t(e[0]*s(2));// the registration of the record definition extension | ||
const oe=e=>{let t=e[0]-57344,s=e[1],n=T[t];n&&n.isShared&&((T.restoreStructures||(T.restoreStructures=[]))[t]=n),T[t]=s,s.read=i(s);let a={};if(q.keyMap)for(let t,n=2,r=e.length;n<r;n++)t=q.decodeKey(s[n-2]),a[o(t)]=e[n];else for(let t,n=2,r=e.length;n<r;n++)t=s[n-2],a[o(t)]=e[n];return a};J[105]=oe,J[14]=e=>F?F[0].slice(F.position0,F.position0+=e):new ie(e,14),J[15]=e=>F?F[1].slice(F.position1,F.position1+=e):new ie(e,15);let de={Error,RegExp};J[27]=e=>(de[e[0]]||Error)(e[1],e[2]);const ue=e=>{if(132!=x[B++])throw new Error("Packed values structure must be followed by a 4 element array");let t=e();// packed values | ||
return N=N?t.concat(N.slice(t.length)):t,N.prefixes=e(),N.suffixes=e(),e();// read the rump | ||
};ue.handlesRead=!0,J[51]=ue,J[j]=e=>{// packed reference | ||
if(!N)if(q.getShared)b();else return new ie(e,j);if("number"==typeof e)return N[16+(0<=e?2*e:-2*e-1)];throw new Error("No support for non-integer packed references yet")},J[25]=e=>stringRefs[e],J[256]=e=>{stringRefs=[];try{return e()}finally{stringRefs=null}},J[256].handlesRead=!0,J[28]=e=>{Y||(Y=new Map,Y.id=0);let t,s=Y.id++,n=x[B];t=4==n>>5?[]:{};let a={target:t};// a placeholder object | ||
Y.set(s,a);let r=e();// read the next value as the target object to id | ||
return a.used?Object.assign(t,r):(a.target=r,r);// no cycle, can just use the returned read object | ||
},J[28].handlesRead=!0,J[29]=e=>{// sharedref http://cbor.schmorp.de/value-sharing (for structured clones) | ||
let t=Y.get(e);return t.used=!0,t.target},J[258]=e=>new Set(e),(J[259]=e=>(q.mapsAsObjects&&(q.mapsAsObjects=!1,z=!0),e())).handlesRead=!0;$.push((e,t)=>225<=e&&255>=e?f(g().prefixes[e-224],t):28704<=e&&32767>=e?f(g().prefixes[e-28672],t):1879052288<=e&&2147483647>=e?f(g().prefixes[e-1879048192],t):216<=e&&223>=e?f(t,g().suffixes[e-216]):27647<=e&&28671>=e?f(t,g().suffixes[e-27639]):1811940352<=e&&1879048191>=e?f(t,g().suffixes[e-1811939328]):e==1399353956?{packedValues:N,structures:T.slice(0),version:t}:55799==e?t:void 0);const ce=1==new Uint8Array(new Uint16Array([1]).buffer)[0],le=[Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?{name:"BigUint64Array"}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?{name:"BigInt64Array"}:BigInt64Array,Float32Array,Float64Array],pe=[64,68,69,70,71,72,77,78,79,85,86];for(let t=0;t<le.length;t++)h(le[t],pe[t]);const fe=Array(147);// this is a table matching binary exponents to the multiplier to determine significant digit rounding | ||
for(let t=0;256>t;t++)fe[t]=+("1e"+Math.floor(45.15-.30103*t));let ge=new Z({useRecords:!1});const he=ge.decode,ye=ge.decodeMultiple,me={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4};let be;try{be=new TextEncoder}catch(e){}let ke,Re;const Oe="undefined"!=typeof Buffer,Me=Oe?Buffer.allocUnsafeSlow:Uint8Array,_e=Oe?Buffer:Uint8Array,Se=256,Ee=Oe?4294967296:2144337920;let Ue,ve,Ie,Ae=0,Ce=null;const xe=/[\u0080-\uFFFF]/,Ve=Symbol("record-id");class Be extends Z{constructor(e){super(e),this.offset=0;let t,s,a,r,i;e=e||{};let o=_e.prototype.utf8Write?function(e,t,s){return Ue.utf8Write(e,t,s)}:!!(be&&be.encodeInto)&&function(e,t){return be.encodeInto(e,Ue.subarray(t)).written},d=this,u=e.structures||e.saveStructures,c=e.maxSharedStructures;if(null==c&&(c=u?128:0),8190<c)throw new Error("Maximum maxSharedStructure is 8190");let l=e.sequential;l&&(c=0),this.structures||(this.structures=[]),this.saveStructures&&(this.saveShared=this.saveStructures);let p,f,g,h=e.sharedValues;if(h){g=Object.create(null);for(let e=0,t=h.length;e<t;e++)g[h[e]]=e}let y=[],m=0,b=0;this.mapEncode=function(e,t){// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet) | ||
if(this._keyMap&&!this._mapped)//console.log('encoding ', value) | ||
switch(e.constructor.name){case"Array":e=e.map(e=>this.encodeKeys(e));//case 'Map': | ||
// value = this.encodeKeys(value) | ||
// break | ||
}//this._mapped = true | ||
return this.encode(e,t)},this.encode=function(n,o){if(Ue||(Ue=new Me(8192),ve=new DataView(Ue.buffer,0,8192),Ae=0),Ie=Ue.length-10,2048>Ie-Ae?(Ue=new Me(Ue.length),ve=new DataView(Ue.buffer,0,Ue.length),Ie=Ue.length-10,Ae=0):o===Ye&&(Ae=2147483640&Ae+7),t=Ae,d.useSelfDescribedHeader&&(ve.setUint32(Ae,3654940416),Ae+=3),i=d.structuredClone?new Map:null,d.bundleStrings&&"string"!=typeof n?(Ce=[],Ce.size=1/0):Ce=null,s=d.structures,s){if(s.uninitialized){let e=d.getShared()||{};d.structures=s=e.structures||[],d.sharedVersion=e.version;let t=d.sharedValues=e.packedValues;if(t){g={};for(let e=0,s=t.length;e<s;e++)g[t[e]]=e}}let e=s.length;if(e>c&&!l&&(e=c),!s.transitions){s.transitions=Object.create(null);for(let t,n=0;n<e;n++){//console.log('shared struct keys:', keys) | ||
if(t=s[n],!t)continue;let e,a=s.transitions;for(let s=0,r=t.length;s<r;s++){void 0===a[Ve]&&(a[Ve]=n);let r=t[s];e=a[r],e||(e=a[r]=Object.create(null)),a=e}a[Ve]=1048576|n}}l||(s.nextId=e)}if(a&&(a=!1),r=s||[],f=g,e.pack){let t=new Map;if(t.values=[],t.encoder=d,t.maxValues=e.maxPrivatePackedValues||(g?16:1/0),t.objectMap=g||!1,t.samplingPackedValues=p,_(n,t),0<t.values.length){Ue[Ae++]=216,Ue[Ae++]=51,M(4);let e=t.values;k(e),M(0),M(0),f=Object.create(g||null);for(let t=0,s=e.length;t<s;t++)f[e[t]]=t}}try{// update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially | ||
if(k(n),Ce&&v(t,k),d.offset=Ae,i&&i.idsToInsert){Ae+=2*i.idsToInsert.length,Ae>Ie&&O(Ae),d.offset=Ae;let e=U(Ue.subarray(t,Ae),i.idsToInsert);return i=null,e}return o&Ye?(Ue.start=t,Ue.end=Ae,Ue):Ue.subarray(t,Ae);// position can change if we call encode again in saveShared, so we get the buffer now | ||
}finally{if(s)if(10>b&&b++,s.length>c&&(s.length=c),1e4<m)s.transitions=null,b=0,m=0,0<y.length&&(y=[]);else if(0<y.length&&!l){for(let e=0,t=y.length;e<t;e++)y[e][Ve]=void 0;y=[]}if(a&&d.saveShared){d.structures.length>c&&(d.structures=d.structures.slice(0,c));// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save | ||
let e=Ue.subarray(t,Ae);return!1===d.updateSharedData()?d.encode(n):e;// re-encode if it fails | ||
}o&Ne&&(Ae=t)}},this.findCommonStringsToPack=()=>(p=new Map,g||(g=Object.create(null)),e=>{let t=e&&e.threshold||4,s=this.pack?e.maxPrivatePackedValues||16:0;h||(h=this.sharedValues=[]);for(let[n,r]of p)r.count>t&&(g[n]=s++,h.push(n),a=!0);for(;this.saveShared&&!1===this.updateSharedData(););p=null});const k=s=>{Ae>Ie&&(Ue=O(Ae));var n,a=typeof s;if("string"==a){if(f){let t=f[s];if(0<=t)return void(16>t?Ue[Ae++]=t+224:(Ue[Ae++]=198,1&t?k(15-t>>1):k(t-16>>1)));/* } else if (packedStatus.serializationId != serializationId) { | ||
packedStatus.serializationId = serializationId | ||
packedStatus.count = 1 | ||
if (options.sharedPack) { | ||
let sharedCount = packedStatus.sharedCount = (packedStatus.sharedCount || 0) + 1 | ||
if (shareCount > (options.sharedPack.threshold || 5)) { | ||
let sharedPosition = packedStatus.position = packedStatus.nextSharedPosition | ||
hasSharedUpdate = true | ||
if (sharedPosition < 16) | ||
target[position++] = sharedPosition + 0xc0 | ||
} | ||
} | ||
} // else any in-doc incrementation?*/if(p&&!e.pack){let e=p.get(s);e?e.count++:p.set(s,{count:1})}}let a=s.length;if(Ce&&4<=a&&1024>a){if((Ce.size+=a)>61440){let e,s=(Ce[0]?3*Ce[0].length+Ce[1].length:0)+10;Ae+s>Ie&&(Ue=O(Ae+s)),Ue[Ae++]=217,Ue[Ae++]=223,Ue[Ae++]=249,Ue[Ae++]=Ce.position?132:130,Ue[Ae++]=26,e=Ae-t,Ae+=4,Ce.position&&v(t,k),Ce=["",""],Ce.size=0,Ce.position=e}let e=xe.test(s);return Ce[e?0:1]+=s,Ue[Ae++]=e?206:207,void k(a)}let r;// first we estimate the header size, so we can write to the correct location | ||
r=32>a?1:256>a?2:65536>a?3:5;let i=3*a;if(Ae+i>Ie&&(Ue=O(Ae+i)),64>a||!o){let e,t,i,o=Ae+r;for(e=0;e<a;e++)t=s.charCodeAt(e),128>t?Ue[o++]=t:2048>t?(Ue[o++]=192|t>>6,Ue[o++]=128|63&t):55296==(64512&t)&&56320==(64512&(i=s.charCodeAt(e+1)))?(t=65536+((1023&t)<<10)+(1023&i),e++,Ue[o++]=240|t>>18,Ue[o++]=128|63&t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t):(Ue[o++]=224|t>>12,Ue[o++]=128|63&t>>6,Ue[o++]=128|63&t);n=o-Ae-r}else n=o(s,Ae+r,i);24>n?Ue[Ae++]=96|n:256>n?(2>r&&Ue.copyWithin(Ae+2,Ae+1,Ae+1+n),Ue[Ae++]=120,Ue[Ae++]=n):65536>n?(3>r&&Ue.copyWithin(Ae+3,Ae+2,Ae+2+n),Ue[Ae++]=121,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(5>r&&Ue.copyWithin(Ae+5,Ae+3,Ae+3+n),Ue[Ae++]=122,ve.setUint32(Ae,n),Ae+=4),Ae+=n}else if("number"===a){if(s>>>0===s)24>s?Ue[Ae++]=s:256>s?(Ue[Ae++]=24,Ue[Ae++]=s):65536>s?(Ue[Ae++]=25,Ue[Ae++]=s>>8,Ue[Ae++]=255&s):(Ue[Ae++]=26,ve.setUint32(Ae,s),Ae+=4);else if(s>>0===s)-24<=s?Ue[Ae++]=31-s:-256<=s?(Ue[Ae++]=56,Ue[Ae++]=~s):-65536<=s?(Ue[Ae++]=57,ve.setUint16(Ae,~s),Ae+=2):(Ue[Ae++]=58,ve.setUint32(Ae,~s),Ae+=4);else{let e;if(0<(e=this.useFloat32)&&4294967296>s&&-2147483648<=s){Ue[Ae++]=250,ve.setFloat32(Ae,s);let t;if(4>e||// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved | ||
(t=s*fe[(127&Ue[Ae])<<1|Ue[Ae+1]>>7])>>0===t)return void(Ae+=4);// move back into position for writing a double | ||
Ae--}Ue[Ae++]=251,ve.setFloat64(Ae,s),Ae+=8}}else if("object"===a){if(!s)Ue[Ae++]=246;else{if(i){let e=i.get(s);if(e){// 16-bit uint | ||
if(Ue[Ae++]=216,Ue[Ae++]=29,Ue[Ae++]=25,!e.references){let t=i.idsToInsert||(i.idsToInsert=[]);e.references=[],t.push(e)}// TODO: also support 32-bit | ||
return e.references.push(Ae-t),void(Ae+=2)}i.set(s,{offset:Ae-t})}let e=s.constructor;if(e===Object)R(s,!0);else if(e===Array){n=s.length,24>n?Ue[Ae++]=128|n:M(n);for(let e=0;e<n;e++)k(s[e])}else if(e!==Map){for(let e,t=0,n=ke.length;t<n;t++)if(e=Re[t],s instanceof e){let e=ke[t],n=e.tag;return null==n&&(n=e.getTag&&e.getTag.call(this,s)),24>n?Ue[Ae++]=192|n:256>n?(Ue[Ae++]=216,Ue[Ae++]=n):65536>n?(Ue[Ae++]=217,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):-1<n&&(Ue[Ae++]=218,ve.setUint32(Ae,n),Ae+=4),void e.encode.call(this,s,k,O)}if(s[Symbol.iterator]){Ue[Ae++]=159;// indefinite length array | ||
for(let e of s)k(e);// stop-code | ||
return void(Ue[Ae++]=255)}// no extension found, write as object | ||
R(s,!s.hasOwnProperty)}else if((this.mapsAsObjects?!1!==this.useTag259ForMaps:this.useTag259ForMaps)&&(Ue[Ae++]=217,Ue[Ae++]=1,Ue[Ae++]=3),n=s.size,24>n?Ue[Ae++]=160|n:256>n?(Ue[Ae++]=184,Ue[Ae++]=n):65536>n?(Ue[Ae++]=185,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(Ue[Ae++]=186,ve.setUint32(Ae,n),Ae+=4),d.keyMap)for(let[e,t]of s)k(d.encodeKey(e)),k(t);else for(let[e,t]of s)k(e),k(t)}}else if("boolean"===a)Ue[Ae++]=s?245:244;else if("bigint"===a){if(s<BigInt(1)<<BigInt(64)&&0<=s)Ue[Ae++]=27,ve.setBigUint64(Ae,s);else if(s>-(BigInt(1)<<BigInt(64))&&0>s)Ue[Ae++]=59,ve.setBigUint64(Ae,-s-BigInt(1));else// overflow | ||
if(this.largeBigIntToFloat)Ue[Ae++]=251,ve.setFloat64(Ae,+s);else throw new RangeError(s+" was too large to fit in CBOR 64-bit integer format, set largeBigIntToFloat to convert to float-64");Ae+=8}else if("undefined"===a)Ue[Ae++]=247;else throw new Error("Unknown type: "+a)},R=!1===this.useRecords?this.variableMapSize?e=>{// this method is slightly slower, but generates "preferred serialization" (optimally small for smaller objects) | ||
let t=Object.keys(e),s=Object.values(e),n=t.length;if(24>n?Ue[Ae++]=160|n:256>n?(Ue[Ae++]=184,Ue[Ae++]=n):65536>n?(Ue[Ae++]=185,Ue[Ae++]=n>>8,Ue[Ae++]=255&n):(Ue[Ae++]=186,ve.setUint32(Ae,n),Ae+=4),d.keyMap)for(let e=0;e<n;e++)k(encodeKey(t[e])),k(s[e]);else for(let e=0;e<n;e++)k(t[e]),k(s[e])}:(e,s)=>{Ue[Ae++]=185;// always use map 16, so we can preallocate and set the length afterwards | ||
let n=Ae-t;Ae+=2;let a=0;if(d.keyMap)for(let t in e)(s||e.hasOwnProperty(t))&&(k(d.encodeKey(t)),k(e[t]),a++);else for(let t in e)(s||e.hasOwnProperty(t))&&(k(t),k(e[t]),a++);Ue[n++ +t]=a>>8,Ue[n+t]=255&a}:(e,t)=>{let s,n,o,d=r.transitions||(r.transitions=Object.create(null)),u=0,l=0;if(this.keyMap){o=Object.keys(e).map(e=>this.encodeKey(e)),l=o.length;for(let e,t=0;t<l;t++)e=o[t],s=d[e],s||(s=d[e]=Object.create(null),u++),d=s}else for(let a in e)(t||e.hasOwnProperty(a))&&(s=d[a],s||(1048576&d[Ve]&&(n=65535&d[Ve]),s=d[a]=Object.create(null),u++),d=s,l++);let p=d[Ve];if(void 0!==p)p&=65535,Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p;else if(o||(o=d.__keys__||(d.__keys__=Object.keys(e))),void 0===n?(p=r.nextId++,!p&&(p=0,r.nextId=1),p>=Se&&(r.nextId=(p=c)+1)):p=n,r[p]=o,p<c){Ue[Ae++]=217,Ue[Ae++]=224|p>>8,Ue[Ae++]=255&p,d=r.transitions;for(let e=0;e<l;e++)(void 0===d[Ve]||1048576&d[Ve])&&(d[Ve]=p),d=d[o[e]];d[Ve]=1048576|p,a=!0}else{d[Ve]=p,ve.setUint32(Ae,3655335680),Ae+=3,u&&(m+=b*u),y.length>=Se-c&&(y.shift()[Ve]=void 0),y.push(d),M(l+2),k(57344+p),k(o);for(let t of Object.values(e))k(t);return}for(let s in 24>l?Ue[Ae++]=128|l:M(l),e)(t||e.hasOwnProperty(s))&&k(e[s])},O=e=>{var s=Math.min,a=Math.max;let r;if(16777216<e){// special handling for really large buffers | ||
if(e-t>Ee)throw new Error("Encoded buffer would be larger than maximum buffer size");r=s(Ee,4096*n(a((e-t)*(67108864<e?1.25:2),4194304)/4096))}else// faster handling for smaller buffers | ||
r=(a(e-t<<2,Ue.length-1)>>12)+1<<12;let i=new Me(r);return ve=new DataView(i.buffer,0,r),Ue.copy?Ue.copy(i,0,t,e):i.set(Ue.slice(t,e)),Ae-=t,t=0,Ie=i.length-10,Ue=i}}useBuffer(e){// this means we are finished using our own buffer and we can write over it safely | ||
Ue=e,ve=new DataView(Ue.buffer,Ue.byteOffset,Ue.byteLength),Ae=0}clearSharedData(){this.structures&&(this.structures=[]),this.sharedValues&&(this.sharedValues=void 0)}updateSharedData(){let e=this.sharedVersion||0;this.sharedVersion=e+1;let t=this.structures.slice(0),s=new Le(t,this.sharedValues,this.sharedVersion),n=this.saveShared(s,t=>(t&&t.version||0)==e);// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data | ||
return!1===n?(s=this.getShared()||{},this.structures=s.structures||[],this.sharedValues=s.packedValues,this.sharedVersion=s.version,this.structures.nextId=this.structures.length):t.forEach((e,t)=>this.structures[t]=e),n}}class Le{constructor(e,t,s){this.structures=e,this.packedValues=t,this.version=s}}const Pe=1==new Uint8Array(new Uint16Array([1]).buffer)[0];Re=[Date,Set,Error,RegExp,ie,ArrayBuffer,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?function(){}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?function(){}:BigInt64Array,Float32Array,Float64Array,Le],ke=[{// Date | ||
tag:1,encode(e,t){let s=e.getTime()/1e3;(this.useTimestamp32||0===e.getMilliseconds())&&0<=s&&4294967296>s?(Ue[Ae++]=26,ve.setUint32(Ae,s),Ae+=4):(Ue[Ae++]=251,ve.setFloat64(Ae,s),Ae+=8)}},{// Set | ||
tag:258,// https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md | ||
encode(e,t){let s=Array.from(e);t(s)}},{// Error | ||
tag:27,// http://cbor.schmorp.de/generic-object | ||
encode(e,t){t([e.name,e.message])}},{// RegExp | ||
tag:27,// http://cbor.schmorp.de/generic-object | ||
encode(e,t){t(["RegExp",e.source,e.flags])}},{// Tag | ||
getTag(e){return e.tag},encode(e,t){t(e.value)}},{// ArrayBuffer | ||
encode(e,t,s){E(e,s)}},{// Uint8Array | ||
getTag(e){if(e.constructor===Uint8Array&&(this.tagUint8Array||Oe&&!1!==this.tagUint8Array))return 64;// else no tag | ||
},encode(e,t,s){E(e,s)}},S(68,1),S(69,2),S(70,4),S(71,8),S(72,1),S(77,2),S(78,4),S(79,8),S(85,4),S(86,8),{encode(e,t){// write SharedData | ||
let s=e.packedValues||[],n=e.structures||[];if(0<s.values.length){Ue[Ae++]=216,Ue[Ae++]=51,M(4);let e=s.values;t(e),M(0),M(0),packedObjectMap=Object.create(sharedPackedObjectMap||null);for(let t=0,s=e.length;t<s;t++)packedObjectMap[e[t]]=t}if(n){ve.setUint32(Ae,3655335424),Ae+=3;let s=n.slice(0);s.unshift(57344),s.push(new ie(e.version,1399353956)),t(s)}else t(new ie(e.version,1399353956))}}];let De=new Be({useRecords:!1});const je=De.encode,{NEVER:we,ALWAYS:Te,DECIMAL_ROUND:Ke,DECIMAL_FIT:Fe}=me,Ye=512,Ne=1024;e.ALWAYS=Te,e.DECIMAL_FIT=Fe,e.DECIMAL_ROUND=Ke,e.Decoder=Z,e.Encoder=Be,e.FLOAT32_OPTIONS=me,e.NEVER=we,e.REUSE_BUFFER_MODE=Ye,e.Tag=ie,e.addExtension=function t(e){if(e.Class){if(!e.encode)throw new Error("Extension has no encode function");Re.unshift(e.Class),ke.unshift(e)}O(e)},e.clearSource=R,e.decode=he,e.decodeIter=function s(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a promise");const n=new Z(t);let a;const r=e=>{let t;// if there's incomplete data from previous chunk, concatinate and try again | ||
a&&(e=Buffer.concat([a,e]),a=void 0);try{t=n.decodeMultiple(e)}catch(s){if(s.incomplete)a=e.slice(s.lastPosition),t=s.values;else throw s}return t};if("function"==typeof e[Symbol.iterator])return function*t(){for(const t of e)yield*r(t)}();return"function"==typeof e[Symbol.asyncIterator]?async function*t(){for await(const t of e)yield*r(t)}():void 0},e.decodeMultiple=ye,e.encode=je,e.encodeIter=/** | ||
* Given an Iterable first argument, returns an Iterable where each value is encoded as a Buffer | ||
* If the argument is only Async Iterable, the return value will be an Async Iterable. | ||
* @param {Iterable|Iterator|AsyncIterable|AsyncIterator} objectIterator - iterable source, like a Readable object stream, an array, Set, or custom object | ||
* @param {options} [options] - cbor-x Encoder options | ||
* @returns {IterableIterator|Promise.<AsyncIterableIterator>} | ||
*/function s(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, or a Promise for an Async Iterable");else{if("function"==typeof e[Symbol.iterator])return I(e,t);if("function"==typeof e.then||"function"==typeof e[Symbol.asyncIterator])return A(e,t);throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a Promise")}},e.isNativeAccelerationEnabled=!1,e.roundFloat32=function t(e){ne[0]=e;let s=fe[(127&ae[3])<<1|ae[2]>>7];return(s*e+(0<e?.5:-.5)>>0)/s},Object.defineProperty(e,"__esModule",{value:!0})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CBOR={})}(this,(function(e){"use strict";let t,r,n;try{t=new TextDecoder}catch(e){}let i=0;const s={};let o,a,l,u,f,c,d,h={},y=0,p=0,g=[],b=[],w={useRecords:!1,mapsAsObjects:!0},m=!1;class A{constructor(e){if(e&&(!e.keyMap&&!e._keyMap||e.useRecords||(e.useRecords=!1,e.mapsAsObjects=!0),!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.getStructures&&(e.getShared=e.getStructures),e.getShared&&!e.structures&&((e.structures=[]).uninitialized=!0),e.keyMap)){this.mapKey=new Map;for(let[t,r]of Object.entries(e.keyMap))this.mapKey.set(r,t)}Object.assign(this,e)}decodeKey(e){return this.keyMap&&this.mapKey.get(e)||e}encodeKey(e){return this.keyMap&&this.keyMap.hasOwnProperty(e)?this.keyMap[e]:e}encodeKeys(e){if(!this._keyMap)return e;let t=new Map;for(let[r,n]of Object.entries(e))t.set(this._keyMap.hasOwnProperty(r)?this._keyMap[r]:r,n);return t}decodeKeys(e){if(!this._keyMap||"Map"!=e.constructor.name)return e;if(!this._mapKey){this._mapKey=new Map;for(let[e,t]of Object.entries(this._keyMap))this._mapKey.set(t,e)}let t={};return e.forEach(((e,r)=>t[E(this._mapKey.has(r)?this._mapKey.get(r):r)]=e)),t}mapDecode(e,t){let r=this.decode(e);return this._keyMap&&"Array"===r.constructor.name?r.map((e=>this.decodeKeys(e))):r}decode(e,t){if(r)return W((()=>(H(),this?this.decode(e,t):A.prototype.decode.call(w,e,t))));n=t>-1?t:e.length,i=0,p=0,a=null,l=null,r=e;try{c=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){if(r=null,e instanceof Uint8Array)throw t;throw new Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof A){if(h=this,f=this.sharedValues&&(this.pack?new Array(this.maxPrivatePackedValues||16).concat(this.sharedValues):this.sharedValues),this.structures)return o=this.structures,v();(!o||o.length>0)&&(o=[])}else h=w,(!o||o.length>0)&&(o=[]),f=null;return v()}decodeMultiple(e,t){let r,n=0;try{let s=e.length;m=!0;let o=this?this.decode(e,s):J.decode(e,s);if(!t){for(r=[o];i<s;)n=i,r.push(v());return r}if(!1===t(o))return;for(;i<s;)if(n=i,!1===t(v()))return}catch(e){throw e.lastPosition=n,e.values=r,e}finally{m=!1,H()}}}function v(){try{let e=k();if(l){if(i>=l.postBundlePosition){let e=new Error("Unexpected bundle position");throw e.incomplete=!0,e}i=l.postBundlePosition,l=null}if(i==n)o=null,r=null,u&&(u=null);else{if(i>n){let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}if(!m)throw new Error("Data read, but end of buffer not reached")}return e}catch(e){throw H(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function k(){let e=r[i++],t=e>>5;if(e&=31,e>23)switch(e){case 24:e=r[i++];break;case 25:if(7==t)return function(){let e=r[i++],t=r[i++],n=(127&e)>>2;if(31===n)return t||3&e?NaN:128&e?-1/0:1/0;if(0===n){let r=((3&e)<<8|t)/(1<<24);return 128&e?-r:r}return x[3]=128&e|56+(n>>1),x[2]=(7&e)<<5|t>>3,x[1]=t<<5,x[0]=0,B[0]}();e=c.getUint16(i),i+=2;break;case 26:if(7==t){let e=c.getFloat32(i);if(h.useFloat32>2){let t=Y[(127&r[i])<<1|r[i+1]>>7];return i+=4,(t*e+(e>0?.5:-.5)>>0)/t}return i+=4,e}e=c.getUint32(i),i+=4;break;case 27:if(7==t){let e=c.getFloat64(i);return i+=8,e}if(t>1){if(c.getUint32(i)>0)throw new Error("JavaScript does not support arrays, maps, or strings with length over 4294967295");e=c.getUint32(i+4)}else h.int64AsNumber?(e=4294967296*c.getUint32(i),e+=c.getUint32(i+4)):e=c.getBigUint64(i);i+=8;break;case 31:switch(t){case 2:case 3:throw new Error("Indefinite length not supported for byte or text strings");case 4:let e,r=[],n=0;for(;(e=k())!=s;)r[n++]=e;return 4==t?r:3==t?r.join(""):Buffer.concat(r);case 5:let i;if(h.mapsAsObjects){let e={};if(h.keyMap)for(;(i=k())!=s;)e[E(h.decodeKey(i))]=k();else for(;(i=k())!=s;)e[E(i)]=k();return e}{d&&(h.mapsAsObjects=!0,d=!1);let e=new Map;if(h.keyMap)for(;(i=k())!=s;)e.set(h.decodeKey(i),k());else for(;(i=k())!=s;)e.set(i,k());return e}case 7:return s;default:throw new Error("Invalid major type for indefinite length "+t)}default:throw new Error("Unknown token "+e)}switch(t){case 0:return e;case 1:return~e;case 2:return function(e){return h.copyBuffers?Uint8Array.prototype.slice.call(r,i,i+=e):r.subarray(i,i+=e)}(e);case 3:if(p>=i)return a.slice(i-y,(i+=e)-y);if(0==p&&n<140&&e<32){let t=e<16?j(e):function(e){let t=i,n=new Array(e);for(let s=0;s<e;s++){const e=r[i++];if((128&e)>0)return void(i=t);n[s]=e}return S.apply(String,n)}(e);if(null!=t)return t}return M(e);case 4:let t=new Array(e);for(let r=0;r<e;r++)t[r]=k();return t;case 5:if(h.mapsAsObjects){let t={};if(h.keyMap)for(let r=0;r<e;r++)t[E(h.decodeKey(k()))]=k();else for(let r=0;r<e;r++)t[E(k())]=k();return t}{d&&(h.mapsAsObjects=!0,d=!1);let t=new Map;if(h.keyMap)for(let r=0;r<e;r++)t.set(h.decodeKey(k()),k());else for(let r=0;r<e;r++)t.set(k(),k());return t}case 6:if(e>=57337){let t=o[8191&e];if(t)return t.read||(t.read=I(t)),t.read();if(e<65536){if(57343==e)return _(k());if(57342==e){let e=L(),t=k();for(let r=2;r<e;r++)_([t++,k()]);return k()}if(57337==e)return function(){let e=L(),t=i+k();for(let t=2;t<e;t++){let e=L();i+=e}let r=i;return i=t,l=[O(L()),O(L())],l.position0=0,l.position1=0,l.postBundlePosition=i,i=r,k()}();if(h.getShared&&(z(),t=o[8191&e],t))return t.read||(t.read=I(t)),t.read()}}let s=g[e];if(s)return s.handlesRead?s(k):s(k());{let t=k();for(let r=0;r<b.length;r++){let n=b[r](e,t);if(void 0!==n)return n}return new V(t,e)}case 7:switch(e){case 20:return!1;case 21:return!0;case 22:return null;case 23:return;default:let t=(f||T())[e];if(void 0!==t)return t;throw new Error("Unknown token "+e)}default:if(isNaN(e)){let e=new Error("Unexpected end of CBOR data");throw e.incomplete=!0,e}throw new Error("Unknown CBOR token "+e)}}const U=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function I(e){return e.slowReads=0,function(){let e=r[i++];if(e&=31,e>23)switch(e){case 24:e=r[i++];break;case 25:e=c.getUint16(i),i+=2;break;case 26:e=c.getUint32(i),i+=4;break;default:throw new Error("Expected array header, but got "+r[i-1])}let t=this.compiledReader;for(;t;){if(t.propertyCount===e)return t(k);t=t.next}if(this.slowReads++>=3){let r=this.length==e?this:this.slice(0,e);return t=h.keyMap?new Function("r","return {"+r.map((e=>h.decodeKey(e))).map((e=>U.test(e)?E(e)+":r()":"["+JSON.stringify(e)+"]:r()")).join(",")+"}"):new Function("r","return {"+r.map((e=>U.test(e)?E(e)+":r()":"["+JSON.stringify(e)+"]:r()")).join(",")+"}"),this.compiledReader&&(t.next=this.compiledReader),t.propertyCount=e,this.compiledReader=t,t(k)}let n={};if(h.keyMap)for(let t=0;t<e;t++)n[E(h.decodeKey(this[t]))]=k();else for(let t=0;t<e;t++)n[E(this[t])]=k();return n}}function E(e){return"__proto__"===e?"__proto_":e}let M=O;function O(e){let n;if(e<16&&(n=j(e)))return n;if(e>64&&t)return t.decode(r.subarray(i,i+=e));const s=i+e,o=[];for(n="";i<s;){const e=r[i++];if(0==(128&e))o.push(e);else if(192==(224&e)){const t=63&r[i++];o.push((31&e)<<6|t)}else if(224==(240&e)){const t=63&r[i++],n=63&r[i++];o.push((31&e)<<12|t<<6|n)}else if(240==(248&e)){let t=(7&e)<<18|(63&r[i++])<<12|(63&r[i++])<<6|63&r[i++];t>65535&&(t-=65536,o.push(t>>>10&1023|55296),t=56320|1023&t),o.push(t)}else o.push(e);o.length>=4096&&(n+=S.apply(String,o),o.length=0)}return o.length>0&&(n+=S.apply(String,o)),n}let S=String.fromCharCode;function j(e){if(e<4){if(e<2){if(0===e)return"";{let e=r[i++];return(128&e)>1?void(i-=1):S(e)}}{let t=r[i++],n=r[i++];if((128&t)>0||(128&n)>0)return void(i-=2);if(e<3)return S(t,n);let s=r[i++];return(128&s)>0?void(i-=3):S(t,n,s)}}{let t=r[i++],n=r[i++],s=r[i++],o=r[i++];if((128&t)>0||(128&n)>0||(128&s)>0||(128&o)>0)return void(i-=4);if(e<6){if(4===e)return S(t,n,s,o);{let e=r[i++];return(128&e)>0?void(i-=5):S(t,n,s,o,e)}}if(e<8){let a=r[i++],l=r[i++];if((128&a)>0||(128&l)>0)return void(i-=6);if(e<7)return S(t,n,s,o,a,l);let u=r[i++];return(128&u)>0?void(i-=7):S(t,n,s,o,a,l,u)}{let a=r[i++],l=r[i++],u=r[i++],f=r[i++];if((128&a)>0||(128&l)>0||(128&u)>0||(128&f)>0)return void(i-=8);if(e<10){if(8===e)return S(t,n,s,o,a,l,u,f);{let e=r[i++];return(128&e)>0?void(i-=9):S(t,n,s,o,a,l,u,f,e)}}if(e<12){let c=r[i++],d=r[i++];if((128&c)>0||(128&d)>0)return void(i-=10);if(e<11)return S(t,n,s,o,a,l,u,f,c,d);let h=r[i++];return(128&h)>0?void(i-=11):S(t,n,s,o,a,l,u,f,c,d,h)}{let c=r[i++],d=r[i++],h=r[i++],y=r[i++];if((128&c)>0||(128&d)>0||(128&h)>0||(128&y)>0)return void(i-=12);if(e<14){if(12===e)return S(t,n,s,o,a,l,u,f,c,d,h,y);{let e=r[i++];return(128&e)>0?void(i-=13):S(t,n,s,o,a,l,u,f,c,d,h,y,e)}}{let p=r[i++],g=r[i++];if((128&p)>0||(128&g)>0)return void(i-=14);if(e<15)return S(t,n,s,o,a,l,u,f,c,d,h,y,p,g);let b=r[i++];return(128&b)>0?void(i-=15):S(t,n,s,o,a,l,u,f,c,d,h,y,p,g,b)}}}}}let B=new Float32Array(1),x=new Uint8Array(B.buffer,0,4);new Array(4096);class V{constructor(e,t){this.value=e,this.tag=t}}g[0]=e=>new Date(e),g[1]=e=>new Date(Math.round(1e3*e)),g[2]=e=>{let t=BigInt(0);for(let r=0,n=e.byteLength;r<n;r++)t=BigInt(e[r])+t<<BigInt(8);return t},g[3]=e=>BigInt(-1)-g[2](e),g[4]=e=>+(e[1]+"e"+e[0]),g[5]=e=>e[1]*Math.exp(e[0]*Math.log(2));const _=e=>{let t=e[0]-57344,r=e[1],n=o[t];n&&n.isShared&&((o.restoreStructures||(o.restoreStructures=[]))[t]=n),o[t]=r,r.read=I(r);let i={};if(h.keyMap)for(let t=2,n=e.length;t<n;t++){i[E(h.decodeKey(r[t-2]))]=e[t]}else for(let t=2,n=e.length;t<n;t++){i[E(r[t-2])]=e[t]}return i};g[105]=_,g[14]=e=>l?l[0].slice(l.position0,l.position0+=e):new V(e,14),g[15]=e=>l?l[1].slice(l.position1,l.position1+=e):new V(e,15);let R={Error:Error,RegExp:RegExp};g[27]=e=>(R[e[0]]||Error)(e[1],e[2]);const P=e=>{if(132!=r[i++])throw new Error("Packed values structure must be followed by a 4 element array");let t=e();return f=f?t.concat(f.slice(t.length)):t,f.prefixes=e(),f.suffixes=e(),e()};function F(e,t){return"string"==typeof e?e+t:e instanceof Array?e.concat(t):Object.assign({},e,t)}function T(){if(!f){if(!h.getShared)throw new Error("No packed values available");z()}return f}P.handlesRead=!0,g[51]=P,g[6]=e=>{if(!f){if(!h.getShared)return new V(e,6);z()}if("number"==typeof e)return f[16+(e>=0?2*e:-2*e-1)];throw new Error("No support for non-integer packed references yet")},g[28]=e=>{u||(u=new Map,u.id=0);let t,n=u.id++;t=r[i]>>5==4?[]:{};let s={target:t};u.set(n,s);let o=e();return s.used?Object.assign(t,o):(s.target=o,o)},g[28].handlesRead=!0,g[29]=e=>{let t=u.get(e);return t.used=!0,t.target},g[258]=e=>new Set(e),(g[259]=e=>(h.mapsAsObjects&&(h.mapsAsObjects=!1,d=!0),e())).handlesRead=!0;b.push(((e,t)=>e>=225&&e<=255?F(T().prefixes[e-224],t):e>=28704&&e<=32767?F(T().prefixes[e-28672],t):e>=1879052288&&e<=2147483647?F(T().prefixes[e-1879048192],t):e>=216&&e<=223?F(t,T().suffixes[e-216]):e>=27647&&e<=28671?F(t,T().suffixes[e-27639]):e>=1811940352&&e<=1879048191?F(t,T().suffixes[e-1811939328]):1399353956==e?{packedValues:f,structures:o.slice(0),version:t}:55799==e?t:void 0));const D=1==new Uint8Array(new Uint16Array([1]).buffer)[0],C=[Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?{name:"BigUint64Array"}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?{name:"BigInt64Array"}:BigInt64Array,Float32Array,Float64Array],K=[64,68,69,70,71,72,77,78,79,85,86];for(let e=0;e<C.length;e++)N(C[e],K[e]);function N(e,t){let r="get"+e.name.slice(0,-5);"function"!=typeof e&&(e=null);let n=e.BYTES_PER_ELEMENT;for(let i=0;i<2;i++){if(!i&&1==n)continue;let s=2==n?1:4==n?2:3;g[i?t:t-4]=1==n||i==D?r=>{if(!e)throw new Error("Could not find typed array for code "+t);return new e(Uint8Array.prototype.slice.call(r,0).buffer)}:n=>{if(!e)throw new Error("Could not find typed array for code "+t);let o=new DataView(n.buffer,n.byteOffset,n.byteLength),a=n.length>>s,l=new e(a),u=o[r];for(let e=0;e<a;e++)l[e]=u.call(o,e<<s,i);return l}}}function L(){let e=31&r[i++];if(e>23)switch(e){case 24:e=r[i++];break;case 25:e=c.getUint16(i),i+=2;break;case 26:e=c.getUint32(i),i+=4}return e}function z(){if(h.getShared){let e=W((()=>(r=null,h.getShared())))||{},t=e.structures||[];h.sharedVersion=e.version,f=h.sharedValues=e.packedValues,!0===o?h.structures=o=t:o.splice.apply(o,[0,t.length].concat(t))}}function W(e){let t=n,s=i,f=y,d=p,g=a,b=u,w=l,A=new Uint8Array(r.slice(0,n)),v=o,k=h,U=m,I=e();return n=t,i=s,y=f,p=d,a=g,u=b,l=w,r=A,m=U,o=v,h=k,c=new DataView(r.buffer,r.byteOffset,r.byteLength),I}function H(){r=null,u=null,o=null}const Y=new Array(147);for(let e=0;e<256;e++)Y[e]=+("1e"+Math.floor(45.15-.30103*e));let J=new A({useRecords:!1});const $=J.decode,Z=J.decodeMultiple,q={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4};let G,Q,X;try{G=new TextEncoder}catch(e){}const ee="undefined"!=typeof Buffer,te=ee?Buffer.allocUnsafeSlow:Uint8Array,re=ee?Buffer:Uint8Array,ne="undefined"==typeof Blob?{}:Blob,ie=ee?4294967296:2144337920;let se,oe,ae,le,ue=0,fe=null;const ce=/[\u0080-\uFFFF]/,de=Symbol("record-id");class he extends A{constructor(e){let t,r,n,i,s;super(e),this.offset=0,e=e||{};let o=re.prototype.utf8Write?function(e,t,r){return oe.utf8Write(e,t,r)}:!(!G||!G.encodeInto)&&function(e,t){return G.encodeInto(e,oe.subarray(t)).written},a=this,l=e.structures||e.saveStructures,u=e.maxSharedStructures;if(null==u&&(u=l?128:0),u>8190)throw new Error("Maximum maxSharedStructure is 8190");let f=e.sequential;f&&(u=0),this.structures||(this.structures=[]),this.saveStructures&&(this.saveShared=this.saveStructures);let c,d,h,y=e.sharedValues;if(y){h=Object.create(null);for(let e=0,t=y.length;e<t;e++)h[y[e]]=e}let p=[],g=0,b=0;this.mapEncode=function(e,t){if(this._keyMap&&!this._mapped&&"Array"===e.constructor.name)e=e.map((e=>this.encodeKeys(e)));return this.encode(e,t)},this.encode=function(o,l){if(oe||(oe=new te(8192),ae=new DataView(oe.buffer,0,8192),ue=0),le=oe.length-10,le-ue<2048?(oe=new te(oe.length),ae=new DataView(oe.buffer,0,oe.length),le=oe.length-10,ue=0):l===Be&&(ue=ue+7&2147483640),t=ue,a.useSelfDescribedHeader&&(ae.setUint32(ue,3654940416),ue+=3),s=a.structuredClone?new Map:null,a.bundleStrings&&"string"!=typeof o?(fe=[],fe.size=1/0):fe=null,r=a.structures,r){if(r.uninitialized){let e=a.getShared()||{};a.structures=r=e.structures||[],a.sharedVersion=e.version;let t=a.sharedValues=e.packedValues;if(t){h={};for(let e=0,r=t.length;e<r;e++)h[t[e]]=e}}let e=r.length;if(e>u&&!f&&(e=u),!r.transitions){r.transitions=Object.create(null);for(let t=0;t<e;t++){let e=r[t];if(!e)continue;let n,i=r.transitions;for(let r=0,s=e.length;r<s;r++){void 0===i[de]&&(i[de]=t);let s=e[r];n=i[s],n||(n=i[s]=Object.create(null)),i=n}i[de]=1048576|t}}f||(r.nextId=e)}if(n&&(n=!1),i=r||[],d=h,e.pack){let t=new Map;if(t.values=[],t.encoder=a,t.maxValues=e.maxPrivatePackedValues||(h?16:1/0),t.objectMap=h||!1,t.samplingPackedValues=c,be(o,t),t.values.length>0){oe[ue++]=216,oe[ue++]=51,ge(4);let e=t.values;w(e),ge(0),ge(0),d=Object.create(h||null);for(let t=0,r=e.length;t<r;t++)d[e[t]]=t}}se=l&Ve;try{if(se)return;if(w(o),fe&&ve(t,w),a.offset=ue,s&&s.idsToInsert){ue+=2*s.idsToInsert.length,ue>le&&A(ue),a.offset=ue;let e=function(e,t){let r,n=2*t.length,i=e.length-n;t.sort(((e,t)=>e.offset>t.offset?1:-1));for(let r=0;r<t.length;r++){let n=t[r];n.id=r;for(let t of n.references)e[t++]=r>>8,e[t]=255&r}for(;r=t.pop();){let t=r.offset;e.copyWithin(t+n,t,i),n-=2;let s=t+n;e[s++]=216,e[s++]=28,i=t}return e}(oe.subarray(t,ue),s.idsToInsert);return s=null,e}return l&Be?(oe.start=t,oe.end=ue,oe):oe.subarray(t,ue)}finally{if(r)if(b<10&&b++,r.length>u&&(r.length=u),g>1e4)r.transitions=null,b=0,g=0,p.length>0&&(p=[]);else if(p.length>0&&!f){for(let e=0,t=p.length;e<t;e++)p[e][de]=void 0;p=[]}if(n&&a.saveShared){a.structures.length>u&&(a.structures=a.structures.slice(0,u));let e=oe.subarray(t,ue);return!1===a.updateSharedData()?a.encode(o):e}l&xe&&(ue=t)}},this.findCommonStringsToPack=()=>(c=new Map,h||(h=Object.create(null)),e=>{let t=e&&e.threshold||4,r=this.pack?e.maxPrivatePackedValues||16:0;y||(y=this.sharedValues=[]);for(let[e,i]of c)i.count>t&&(h[e]=r++,y.push(e),n=!0);for(;this.saveShared&&!1===this.updateSharedData(););c=null});const w=r=>{ue>le&&(oe=A(ue));var n,i=typeof r;if("string"===i){if(d){let t=d[r];if(t>=0)return void(t<16?oe[ue++]=t+224:(oe[ue++]=198,w(1&t?15-t>>1:t-16>>1)));if(c&&!e.pack){let e=c.get(r);e?e.count++:c.set(r,{count:1})}}let i,s=r.length;if(fe&&s>=4&&s<1024){if((fe.size+=s)>61440){let e,r=(fe[0]?3*fe[0].length+fe[1].length:0)+10;ue+r>le&&(oe=A(ue+r)),oe[ue++]=217,oe[ue++]=223,oe[ue++]=249,oe[ue++]=fe.position?132:130,oe[ue++]=26,e=ue-t,ue+=4,fe.position&&ve(t,w),fe=["",""],fe.size=0,fe.position=e}let e=ce.test(r);return fe[e?0:1]+=r,oe[ue++]=e?206:207,void w(s)}i=s<32?1:s<256?2:s<65536?3:5;let a=3*s;if(ue+a>le&&(oe=A(ue+a)),s<64||!o){let e,t,o,a=ue+i;for(e=0;e<s;e++)t=r.charCodeAt(e),t<128?oe[a++]=t:t<2048?(oe[a++]=t>>6|192,oe[a++]=63&t|128):55296==(64512&t)&&56320==(64512&(o=r.charCodeAt(e+1)))?(t=65536+((1023&t)<<10)+(1023&o),e++,oe[a++]=t>>18|240,oe[a++]=t>>12&63|128,oe[a++]=t>>6&63|128,oe[a++]=63&t|128):(oe[a++]=t>>12|224,oe[a++]=t>>6&63|128,oe[a++]=63&t|128);n=a-ue-i}else n=o(r,ue+i,a);n<24?oe[ue++]=96|n:n<256?(i<2&&oe.copyWithin(ue+2,ue+1,ue+1+n),oe[ue++]=120,oe[ue++]=n):n<65536?(i<3&&oe.copyWithin(ue+3,ue+2,ue+2+n),oe[ue++]=121,oe[ue++]=n>>8,oe[ue++]=255&n):(i<5&&oe.copyWithin(ue+5,ue+3,ue+3+n),oe[ue++]=122,ae.setUint32(ue,n),ue+=4),ue+=n}else if("number"===i)if(r>>>0===r)r<24?oe[ue++]=r:r<256?(oe[ue++]=24,oe[ue++]=r):r<65536?(oe[ue++]=25,oe[ue++]=r>>8,oe[ue++]=255&r):(oe[ue++]=26,ae.setUint32(ue,r),ue+=4);else if(r>>0===r)r>=-24?oe[ue++]=31-r:r>=-256?(oe[ue++]=56,oe[ue++]=~r):r>=-65536?(oe[ue++]=57,ae.setUint16(ue,~r),ue+=2):(oe[ue++]=58,ae.setUint32(ue,~r),ue+=4);else{let e;if((e=this.useFloat32)>0&&r<4294967296&&r>=-2147483648){let t;if(oe[ue++]=250,ae.setFloat32(ue,r),e<4||(t=r*Y[(127&oe[ue])<<1|oe[ue+1]>>7])>>0===t)return void(ue+=4);ue--}oe[ue++]=251,ae.setFloat64(ue,r),ue+=8}else if("object"===i)if(r){if(s){let e=s.get(r);if(e){if(oe[ue++]=216,oe[ue++]=29,oe[ue++]=25,!e.references){let t=s.idsToInsert||(s.idsToInsert=[]);e.references=[],t.push(e)}return e.references.push(ue-t),void(ue+=2)}s.set(r,{offset:ue-t})}let e=r.constructor;if(e===Object)m(r,!0);else if(e===Array){(n=r.length)<24?oe[ue++]=128|n:ge(n);for(let e=0;e<n;e++)w(r[e])}else if(e===Map)if((this.mapsAsObjects?!1!==this.useTag259ForMaps:this.useTag259ForMaps)&&(oe[ue++]=217,oe[ue++]=1,oe[ue++]=3),(n=r.size)<24?oe[ue++]=160|n:n<256?(oe[ue++]=184,oe[ue++]=n):n<65536?(oe[ue++]=185,oe[ue++]=n>>8,oe[ue++]=255&n):(oe[ue++]=186,ae.setUint32(ue,n),ue+=4),a.keyMap)for(let[e,t]of r)w(a.encodeKey(e)),w(t);else for(let[e,t]of r)w(e),w(t);else{for(let e=0,t=Q.length;e<t;e++){if(r instanceof X[e]){let t=Q[e],n=t.tag;return null==n&&(n=t.getTag&&t.getTag.call(this,r)),n<24?oe[ue++]=192|n:n<256?(oe[ue++]=216,oe[ue++]=n):n<65536?(oe[ue++]=217,oe[ue++]=n>>8,oe[ue++]=255&n):n>-1&&(oe[ue++]=218,ae.setUint32(ue,n),ue+=4),void t.encode.call(this,r,w,A)}}if(r[Symbol.iterator]){if(se){let e=new Error("Iterable should be serialized as iterator");throw e.iteratorNotHandled=!0,e}oe[ue++]=159;for(let e of r)w(e);return void(oe[ue++]=255)}if(r[Symbol.asyncIterator]||e===ne){let e=new Error("Iterable/blob should be serialized as iterator");throw e.iteratorNotHandled=!0,e}m(r,!r.hasOwnProperty)}}else oe[ue++]=246;else if("boolean"===i)oe[ue++]=r?245:244;else if("bigint"===i){if(r<BigInt(1)<<BigInt(64)&&r>=0)oe[ue++]=27,ae.setBigUint64(ue,r);else if(r>-(BigInt(1)<<BigInt(64))&&r<0)oe[ue++]=59,ae.setBigUint64(ue,-r-BigInt(1));else{if(!this.largeBigIntToFloat)throw new RangeError(r+" was too large to fit in CBOR 64-bit integer format, set largeBigIntToFloat to convert to float-64");oe[ue++]=251,ae.setFloat64(ue,Number(r))}ue+=8}else{if("undefined"!==i)throw new Error("Unknown type: "+i);oe[ue++]=247}},m=!1===this.useRecords?this.variableMapSize?e=>{let t=Object.keys(e),r=Object.values(e),n=t.length;if(n<24?oe[ue++]=160|n:n<256?(oe[ue++]=184,oe[ue++]=n):n<65536?(oe[ue++]=185,oe[ue++]=n>>8,oe[ue++]=255&n):(oe[ue++]=186,ae.setUint32(ue,n),ue+=4),a.keyMap)for(let e=0;e<n;e++)w(encodeKey(t[e])),w(r[e]);else for(let e=0;e<n;e++)w(t[e]),w(r[e])}:(e,r)=>{oe[ue++]=185;let n=ue-t;ue+=2;let i=0;if(a.keyMap)for(let t in e)(r||e.hasOwnProperty(t))&&(w(a.encodeKey(t)),w(e[t]),i++);else for(let t in e)(r||e.hasOwnProperty(t))&&(w(t),w(e[t]),i++);oe[n+++t]=i>>8,oe[n+t]=255&i}:(e,t)=>{let r,s,o,a=i.transitions||(i.transitions=Object.create(null)),l=0,f=0;if(this.keyMap){o=Object.keys(e).map((e=>this.encodeKey(e))),f=o.length;for(let e=0;e<f;e++){let t=o[e];r=a[t],r||(r=a[t]=Object.create(null),l++),a=r}}else for(let n in e)(t||e.hasOwnProperty(n))&&(r=a[n],r||(1048576&a[de]&&(s=65535&a[de]),r=a[n]=Object.create(null),l++),a=r,f++);let c=a[de];if(void 0!==c)c&=65535,oe[ue++]=217,oe[ue++]=c>>8|224,oe[ue++]=255&c;else{if(o||(o=a.__keys__||(a.__keys__=Object.keys(e))),void 0===s?(c=i.nextId++,c||(c=0,i.nextId=1),c>=256&&(i.nextId=(c=u)+1)):c=s,i[c]=o,!(c<u)){if(a[de]=c,ae.setUint32(ue,3655335680),ue+=3,l&&(g+=b*l),p.length>=256-u&&(p.shift()[de]=void 0),p.push(a),ge(f+2),w(57344+c),w(o),null===t)return;for(let r in e)(t||e.hasOwnProperty(r))&&w(e[r]);return}oe[ue++]=217,oe[ue++]=c>>8|224,oe[ue++]=255&c,a=i.transitions;for(let e=0;e<f;e++)(void 0===a[de]||1048576&a[de])&&(a[de]=c),a=a[o[e]];a[de]=1048576|c,n=!0}if(f<24?oe[ue++]=128|f:ge(f),null!==t)for(let r in e)(t||e.hasOwnProperty(r))&&w(e[r])},A=e=>{let r;if(e>16777216){if(e-t>ie)throw new Error("Encoded buffer would be larger than maximum buffer size");r=Math.min(ie,4096*Math.round(Math.max((e-t)*(e>67108864?1.25:2),4194304)/4096))}else r=1+(Math.max(e-t<<2,oe.length-1)>>12)<<12;let n=new te(r);return ae=new DataView(n.buffer,0,r),oe.copy?oe.copy(n,0,t,e):n.set(oe.slice(t,e)),ue-=t,t=0,le=n.length-10,oe=n};let v=100,k=1e3;function*U(e,r,n){let i=e.constructor;if(i===Object){let t=!1!==a.useRecords;t?m(e,null):ye(Object.keys(e).length,160);for(let n in e){let i=e[n];t||w(n),i&&"object"==typeof i?r[n]?yield*U(i,r[n]):yield*I(i,r,n):w(i)}}else if(i===Array){ge(e.length);for(let n=0;n<length;n++){let i=e[n];i&&("object"==typeof i||ue-t>v)?r.element?yield*U(i,r.element):yield*I(i,r,"element"):w(i)}}else if(e[Symbol.iterator]){oe[ue++]=159;for(let n of e)n&&("object"==typeof n||ue-t>v)?r.element?yield*U(n,r.element):yield*I(n,r,"element"):w(n);oe[ue++]=255}else i===ne?(ye(e.size,64),yield oe.subarray(t,ue),yield e,E()):e[Symbol.asyncIterator]?(oe[ue++]=159,yield oe.subarray(t,ue),yield e,E(),oe[ue++]=255):w(e);n&&ue>t?yield oe.subarray(t,ue):ue-t>v&&(yield oe.subarray(t,ue),E())}function*I(e,r,n){let i=ue-t;try{w(e),ue-t>v&&(yield oe.subarray(t,ue),E())}catch(s){if(!s.iteratorNotHandled)throw s;r[n]={},ue=t+i,yield*U.call(this,e,r[n])}}function E(){v=k,a.encode(null,Ve)}function M(e,t,r){return v=t&&t.chunkThreshold?k=t.chunkThreshold:100,e&&"object"==typeof e?(a.encode(null,Ve),r(e,a.iterateProperties||(a.iterateProperties={}),!0)):[a.encode(e)]}async function*O(e,t){for(let r of U(e,t,!0)){let e=r.constructor;if(e===re||e===Uint8Array)yield r;else if(e===ne){let e,t=r.stream().getReader();for(;!(e=await t.read()).done;)yield e.value}else if(r[Symbol.asyncIterator])for await(let e of r)E(),e?yield*O(e,t.async||(t.async={})):yield a.encode(e);else yield r}}this.encodeAsIterable=function(e,t){return M(e,t,U)},this.encodeAsAsyncIterable=function(e,t){return M(e,t,O)}}useBuffer(e){oe=e,ae=new DataView(oe.buffer,oe.byteOffset,oe.byteLength),ue=0}clearSharedData(){this.structures&&(this.structures=[]),this.sharedValues&&(this.sharedValues=void 0)}updateSharedData(){let e=this.sharedVersion||0;this.sharedVersion=e+1;let t=this.structures.slice(0),r=new pe(t,this.sharedValues,this.sharedVersion),n=this.saveShared(r,(t=>(t&&t.version||0)==e));return!1===n?(r=this.getShared()||{},this.structures=r.structures||[],this.sharedValues=r.packedValues,this.sharedVersion=r.version,this.structures.nextId=this.structures.length):t.forEach(((e,t)=>this.structures[t]=e)),n}}function ye(e,t){e<24?oe[ue++]=t|e:e<256?(oe[ue++]=24|t,oe[ue++]=e):e<65536?(oe[ue++]=25|t,oe[ue++]=e>>8,oe[ue++]=255&e):(oe[ue++]=26|t,ae.setUint32(ue,e),ue+=4)}class pe{constructor(e,t,r){this.structures=e,this.packedValues=t,this.version=r}}function ge(e){e<24?oe[ue++]=128|e:e<256?(oe[ue++]=152,oe[ue++]=e):e<65536?(oe[ue++]=153,oe[ue++]=e>>8,oe[ue++]=255&e):(oe[ue++]=154,ae.setUint32(ue,e),ue+=4)}function be(e,t){switch(typeof e){case"string":if(e.length>3){if(t.objectMap[e]>-1||t.values.length>=t.maxValues)return;let r=t.get(e);if(r)2==++r.count&&t.values.push(e);else if(t.set(e,{count:1}),t.samplingPackedValues){let r=t.samplingPackedValues.get(e);r?r.count++:t.samplingPackedValues.set(e,{count:1})}}break;case"object":if(e)if(e instanceof Array)for(let r=0,n=e.length;r<n;r++)be(e[r],t);else{let n=!t.encoder.useRecords;for(var r in e)e.hasOwnProperty(r)&&(n&&be(r,t),be(e[r],t))}break;case"function":console.log(e)}}const we=1==new Uint8Array(new Uint16Array([1]).buffer)[0];function me(e,t){return!we&&t>1&&(e-=4),{tag:e,encode:function(e,t){let r=e.byteLength,n=e.byteOffset||0,i=e.buffer||e;t(ee?Buffer.from(i,n,r):new Uint8Array(i,n,r))}}}function Ae(e,t){let r=e.byteLength;r<24?oe[ue++]=64+r:r<256?(oe[ue++]=88,oe[ue++]=r):r<65536?(oe[ue++]=89,oe[ue++]=r>>8,oe[ue++]=255&r):(oe[ue++]=90,ae.setUint32(ue,r),ue+=4),ue+r>=oe.length&&t(ue+r),oe.set(e.buffer?e:new Uint8Array(e),ue),ue+=r}function ve(e,t){ae.setUint32(fe.position+e,ue-fe.position-e+1);let r=fe;fe=null,t(r[0]),t(r[1])}X=[Date,Set,Error,RegExp,V,ArrayBuffer,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,"undefined"==typeof BigUint64Array?function(){}:BigUint64Array,Int8Array,Int16Array,Int32Array,"undefined"==typeof BigInt64Array?function(){}:BigInt64Array,Float32Array,Float64Array,pe],Q=[{tag:1,encode(e,t){let r=e.getTime()/1e3;(this.useTimestamp32||0===e.getMilliseconds())&&r>=0&&r<4294967296?(oe[ue++]=26,ae.setUint32(ue,r),ue+=4):(oe[ue++]=251,ae.setFloat64(ue,r),ue+=8)}},{tag:258,encode(e,t){t(Array.from(e))}},{tag:27,encode(e,t){t([e.name,e.message])}},{tag:27,encode(e,t){t(["RegExp",e.source,e.flags])}},{getTag:e=>e.tag,encode(e,t){t(e.value)}},{encode(e,t,r){Ae(e,r)}},{getTag(e){if(e.constructor===Uint8Array&&(this.tagUint8Array||ee&&!1!==this.tagUint8Array))return 64},encode(e,t,r){Ae(e,r)}},me(68,1),me(69,2),me(70,4),me(71,8),me(72,1),me(77,2),me(78,4),me(79,8),me(85,4),me(86,8),{encode(e,t){let r=e.packedValues||[],n=e.structures||[];if(r.values.length>0){oe[ue++]=216,oe[ue++]=51,ge(4);let e=r.values;t(e),ge(0),ge(0),packedObjectMap=Object.create(sharedPackedObjectMap||null);for(let t=0,r=e.length;t<r;t++)packedObjectMap[e[t]]=t}if(n){ae.setUint32(ue,3655335424),ue+=3;let r=n.slice(0);r.unshift(57344),r.push(new V(e.version,1399353956)),t(r)}else t(new V(e.version,1399353956))}}];let ke=new he({useRecords:!1});const Ue=ke.encode,Ie=ke.encodeAsIterable,Ee=ke.encodeAsAsyncIterable,{NEVER:Me,ALWAYS:Oe,DECIMAL_ROUND:Se,DECIMAL_FIT:je}=q,Be=512,xe=1024,Ve=2048;e.ALWAYS=Oe,e.DECIMAL_FIT=je,e.DECIMAL_ROUND=Se,e.Decoder=A,e.Encoder=he,e.FLOAT32_OPTIONS=q,e.NEVER=Me,e.REUSE_BUFFER_MODE=Be,e.Tag=V,e.addExtension=function(e){if(e.Class){if(!e.encode)throw new Error("Extension has no encode function");X.unshift(e.Class),Q.unshift(e)}!function(e){g[e.tag]=e.decode}(e)},e.clearSource=H,e.decode=$,e.decodeIter=function(e,t={}){if(!e||"object"!=typeof e)throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a promise");const r=new A(t);let n;const i=e=>{let t;n&&(e=Buffer.concat([n,e]),n=void 0);try{t=r.decodeMultiple(e)}catch(r){if(!r.incomplete)throw r;n=e.slice(r.lastPosition),t=r.values}return t};return"function"==typeof e[Symbol.iterator]?function*(){for(const t of e)yield*i(t)}():"function"==typeof e[Symbol.asyncIterator]?async function*(){for await(const t of e)yield*i(t)}():void 0},e.decodeMultiple=Z,e.encode=Ue,e.encodeAsAsyncIterable=Ee,e.encodeAsIterable=Ie,e.encodeIter=function(e,t={}){if(e&&"object"==typeof e){if("function"==typeof e[Symbol.iterator])return function*(e,t){const r=new he(t);for(const t of e)yield r.encode(t)}(e,t);if("function"==typeof e.then||"function"==typeof e[Symbol.asyncIterator])return async function*(e,t){const r=new he(t);for await(const t of e)yield r.encode(t)}(e,t);throw new Error("first argument must be an Iterable, Async Iterable, Iterator, Async Iterator, or a Promise")}throw new Error("first argument must be an Iterable, Async Iterable, or a Promise for an Async Iterable")},e.isNativeAccelerationEnabled=!1,e.roundFloat32=function(e){B[0]=e;let t=Y[(127&x[3])<<1|x[2]>>7];return(t*e+(e>0?.5:-.5)>>0)/t}})); | ||
//# sourceMappingURL=index.min.js.map |
203
dist/test.js
(function (CBOR, chai, fs) { | ||
'use strict'; | ||
chai = chai && Object.prototype.hasOwnProperty.call(chai, 'default') ? chai['default'] : chai; | ||
function _interopNamespaceDefault(e) { | ||
var n = Object.create(null); | ||
if (e) { | ||
Object.keys(e).forEach(function (k) { | ||
if (k !== 'default') { | ||
var d = Object.getOwnPropertyDescriptor(e, k); | ||
Object.defineProperty(n, k, d.get ? d : { | ||
enumerable: true, | ||
get: function () { return e[k]; } | ||
}); | ||
} | ||
}); | ||
} | ||
n.default = e; | ||
return Object.freeze(n); | ||
} | ||
var CBOR__namespace = /*#__PURE__*/_interopNamespaceDefault(CBOR); | ||
const sampleData = JSON.parse(fs.readFileSync(new URL('./example4.json', (document.currentScript && document.currentScript.src || new URL('test.js', document.baseURI).href)))); | ||
@@ -29,15 +46,17 @@ | ||
var Encoder = CBOR.Encoder; | ||
var decode = CBOR.decode; | ||
var encode = CBOR.encode; | ||
var DECIMAL_FIT = CBOR.DECIMAL_FIT; | ||
var Encoder = CBOR__namespace.Encoder; | ||
var decode = CBOR__namespace.decode; | ||
var encode = CBOR__namespace.encode; | ||
var encodeAsIterable = CBOR__namespace.encodeAsIterable; | ||
var encodeAsAsyncIterable = CBOR__namespace.encodeAsAsyncIterable; | ||
var DECIMAL_FIT = CBOR__namespace.DECIMAL_FIT; | ||
var addExtension = CBOR.addExtension; | ||
var addExtension = CBOR__namespace.addExtension; | ||
var zlib = tryRequire('zlib'); | ||
var deflateSync = zlib.deflateSync; | ||
var inflateSync = zlib.inflateSync; | ||
var deflateSync = zlib.brotliCompressSync; | ||
var inflateSync = zlib.brotliDecompressSync; | ||
var constants = zlib.constants; | ||
zlib.deflateSync; | ||
zlib.inflateSync; | ||
zlib.brotliCompressSync; | ||
zlib.brotliDecompressSync; | ||
zlib.constants; | ||
@@ -51,3 +70,3 @@ var ITERATIONS = 4000; | ||
let cborBasic = new Encoder(); | ||
var serialized = cborSenml.encode(data); | ||
var serialized = cborSenml.encode(data); | ||
var deserialized = cborSenml.decode(serialized); | ||
@@ -153,4 +172,4 @@ assert(serialized.length < cborBasic.encode(data).length); | ||
const data = 'RRZG9A6I7xupPeOZhxcOcioFsuhszGOdyDUcbRf4Zef2kdPIfC9RaLO4jTM5JhuZvTsF09fbRHMGtqk7YAgu3vespeTe9l61ziZ6VrMnYu2CamK96wCkmz0VUXyqaiUoTPgzk414LS9yYrd5uh7w18ksJF5SlC2e91rukWvNqAZJjYN3jpkqHNOFchCwFrhbxq2Lrv1kSJPYCx9blRg2hGmYqTbElLTZHv20iNqwZeQbRMgSBPT6vnbCBPnOh1W'; | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.equal(deserialized, data); | ||
@@ -161,7 +180,7 @@ }); | ||
var data = sampleData; | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.deepEqual(deserialized, data); | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.deepEqual(deserialized, data); | ||
@@ -312,2 +331,31 @@ }); | ||
test('addExtension with map', function(){ | ||
function Extended() { | ||
} | ||
var instance = new Extended(); | ||
instance.value = 4; | ||
instance.map = new Map(); | ||
instance.map.set('key', 'value'); | ||
var data = { | ||
extendedInstance: instance, | ||
}; | ||
let encoder = new Encoder(); | ||
addExtension({ | ||
Class: Extended, | ||
tag: 301, | ||
decode: function(data) { | ||
let e = new Extended(); | ||
e.value = data[0]; | ||
e.map = data[1]; | ||
return e | ||
}, | ||
encode: function(instance, encode) { | ||
return encode([instance.value, instance.map]) | ||
} | ||
}); | ||
var serialized = encoder.encode(data); | ||
var deserialized = encoder.decode(serialized); | ||
assert.deepEqual(data, deserialized); | ||
}); | ||
test.skip('text decoder', function() { | ||
@@ -502,11 +550,11 @@ let td = new TextDecoder('ISO-8859-15'); | ||
}; | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.deepEqual(deserialized, data); | ||
// do multiple times to test caching | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.deepEqual(deserialized, data); | ||
var serialized = CBOR.encode(data); | ||
var deserialized = CBOR.decode(serialized); | ||
var serialized = CBOR__namespace.encode(data); | ||
var deserialized = CBOR__namespace.decode(serialized); | ||
assert.deepEqual(deserialized, data); | ||
@@ -664,6 +712,6 @@ }); | ||
test('decodeMultiple', () => { | ||
let values = CBOR.decodeMultiple(new Uint8Array([1, 2, 3, 4])); | ||
let values = CBOR__namespace.decodeMultiple(new Uint8Array([1, 2, 3, 4])); | ||
assert.deepEqual(values, [1, 2, 3, 4]); | ||
values = []; | ||
CBOR.decodeMultiple(new Uint8Array([1, 2, 3, 4]), value => values.push(value)); | ||
CBOR__namespace.decodeMultiple(new Uint8Array([1, 2, 3, 4]), value => values.push(value)); | ||
assert.deepEqual(values, [1, 2, 3, 4]); | ||
@@ -675,2 +723,94 @@ }); | ||
}); | ||
test('encode as iterator', function() { | ||
let hasIterables = { | ||
a: 1, | ||
iterator: (function*() { | ||
yield 2; | ||
yield { | ||
b: (function*() { | ||
yield 3; | ||
})(), | ||
}; | ||
})() | ||
}; | ||
let encodedIterable = encodeAsIterable(hasIterables); | ||
let result = [...encodedIterable]; | ||
result = Buffer.concat(result); | ||
let deserialized = decode(result); | ||
const expectedResult = { | ||
a: 1, | ||
iterator: [2, { b: [3]}] | ||
}; | ||
assert.deepEqual(deserialized, expectedResult); | ||
}); | ||
if (typeof Blob !== 'undefined') | ||
test('encode as iterator with async/blob parts', function() { | ||
let blob = new Blob([Buffer.from([4,5])]); | ||
let hasIterables = { | ||
a: 1, | ||
iterator: (async function*() { | ||
yield 2; | ||
yield { | ||
b: (function*() { | ||
yield 3; | ||
})(), | ||
}; | ||
})(), | ||
blob | ||
}; | ||
let encodedIterable = encodeAsIterable(hasIterables); | ||
let result = [...encodedIterable]; | ||
assert.equal(result[result.length - 1].constructor, Blob); | ||
}); | ||
if (typeof Blob !== 'undefined') | ||
test('encode as async iterator with async/blob parts', async function() { | ||
let blob = new Blob([Buffer.from([4, 5])]); | ||
let hasIterables = { | ||
a: 1, | ||
iterator: (async function* () { | ||
yield 2; | ||
yield { | ||
b: (function* () { | ||
yield 3; | ||
})(), | ||
}; | ||
})(), | ||
blob | ||
}; | ||
let encodedIterable = encodeAsAsyncIterable(hasIterables); | ||
let result = []; | ||
for await (let encodedPart of encodedIterable) { | ||
result.push(encodedPart); | ||
} | ||
let deserialized = decode(Buffer.concat(result)); | ||
const expectedResult = { | ||
a: 1, | ||
iterator: [2, { b: [3]}], | ||
blob: Buffer.from([4,5]), | ||
}; | ||
assert.deepEqual(deserialized, expectedResult); | ||
}); | ||
test.skip('encode as iterator performance', async function() { | ||
function* iterator() { | ||
for (let i = 0; i < 1000; i++) { | ||
yield { | ||
a: 1, | ||
b: 'hello, world', | ||
c: true, | ||
sub: { | ||
d: 'inside', | ||
e: 3 | ||
} | ||
}; | ||
} | ||
} | ||
let result; | ||
let start = performance.now(); | ||
for (let i = 0; i < 1000; i++) { | ||
let encodedIterable = encodeAsIterable(iterator()); | ||
result = [...encodedIterable]; | ||
} | ||
decode(Buffer.concat(result)); | ||
console.log(performance.now() - start, result.length); | ||
}); | ||
}); | ||
@@ -684,3 +824,3 @@ suite('CBOR performance tests', function(){ | ||
for (var i = 0; i < ITERATIONS; i++) { | ||
var deserialized = JSON.parse(serialized); | ||
JSON.parse(serialized); | ||
} | ||
@@ -692,3 +832,3 @@ }); | ||
for (var i = 0; i < ITERATIONS; i++) { | ||
var serialized = JSON.stringify(data); | ||
JSON.stringify(data); | ||
} | ||
@@ -706,3 +846,3 @@ }); | ||
for (var i = 0; i < ITERATIONS; i++) { | ||
var deserialized = encoder.decode(serialized); | ||
encoder.decode(serialized); | ||
} | ||
@@ -720,3 +860,3 @@ }); | ||
encoder.useBuffer(buffer); | ||
var serialized = encoder.encode(data); | ||
encoder.encode(data); | ||
//var serializedGzip = deflateSync(serialized) | ||
@@ -728,2 +868,3 @@ } | ||
}(CBOR, chai, fs)); | ||
})(CBOR, chai, fs); | ||
//# sourceMappingURL=test.js.map |
@@ -1,1 +0,1 @@ | ||
export { encode, Encoder, addExtension, FLOAT32_OPTIONS } from '.' | ||
export { encode, encodeAsIterable, encodeAsAsyncIterable, Encoder, addExtension, FLOAT32_OPTIONS } from '.' |
167
encode.js
@@ -10,6 +10,7 @@ import { Decoder, mult10, Tag, typedArrays, addExtension as decodeAddExtension } from './decode.js' | ||
const ByteArray = hasNodeBuffer ? Buffer : Uint8Array | ||
const RECORD_INLINE_ID = 0xdfff // temporary first-come first-serve tag // proposed tag: 0x7265 // 're' | ||
const BlobConstructor = typeof Blob === 'undefined' ? {} : Blob; | ||
const MAX_STRUCTURES = 0x100 | ||
const MAX_BUFFER_SIZE = hasNodeBuffer ? 0x100000000 : 0x7fd00000 | ||
let serializationId = 1 | ||
let throwOnIterable | ||
let target | ||
@@ -179,3 +180,6 @@ let targetView | ||
} | ||
throwOnIterable = encodeOptions & THROW_ON_ITERABLE; | ||
try { | ||
if (throwOnIterable) | ||
return; | ||
encode(value) | ||
@@ -541,2 +545,7 @@ if (bundledStrings) { | ||
if (value[Symbol.iterator]) { | ||
if (throwOnIterable) { | ||
let error = new Error('Iterable should be serialized as iterator') | ||
error.iteratorNotHandled = true; | ||
throw error; | ||
} | ||
target[position++] = 0x9f // indefinite length array | ||
@@ -549,2 +558,7 @@ for (let entry of value) { | ||
} | ||
if (value[Symbol.asyncIterator] || constructor === BlobConstructor) { | ||
let error = new Error('Iterable/blob should be serialized as iterator') | ||
error.iteratorNotHandled = true; | ||
throw error; | ||
} | ||
// no extension found, write as object | ||
@@ -714,3 +728,6 @@ writeObject(value, !value.hasOwnProperty) // if it doesn't have hasOwnProperty, don't do hasOwnProperty checks | ||
encode(keys) | ||
for (let v of Object.values(object)) encode(v) | ||
if (safePrototype === null) return; // special exit for iterator | ||
for (let key in object) | ||
if (safePrototype || object.hasOwnProperty(key)) | ||
encode(object[key]) | ||
return | ||
@@ -724,2 +741,3 @@ } | ||
} | ||
if (safePrototype === null) return; // special exit for iterator | ||
for (let key in object) | ||
@@ -750,2 +768,126 @@ if (safePrototype || object.hasOwnProperty(key)) | ||
} | ||
let chunkThreshold = 100; | ||
let continuedChunkThreshold = 1000; | ||
this.encodeAsIterable = function(value, options) { | ||
return startEncoding(value, options, encodeObjectAsIterable); | ||
} | ||
this.encodeAsAsyncIterable = function(value, options) { | ||
return startEncoding(value, options, encodeObjectAsAsyncIterable); | ||
} | ||
function* encodeObjectAsIterable(object, iterateProperties, finalIterable) { | ||
let constructor = object.constructor; | ||
if (constructor === Object) { | ||
let useRecords = encoder.useRecords !== false; | ||
if (useRecords) | ||
writeObject(object, null); // write the record identifier | ||
else | ||
writeEntityLength(Object.keys(object).length, 0xa0); | ||
for (let key in object) { | ||
let value = object[key]; | ||
if (!useRecords) encode(key); | ||
if (value && typeof value === 'object') { | ||
if (iterateProperties[key]) | ||
yield* encodeObjectAsIterable(value, iterateProperties[key]); | ||
else | ||
yield* tryEncode(value, iterateProperties, key); | ||
} else encode(value); | ||
} | ||
} else if (constructor === Array) { | ||
writeArrayHeader(object.length); | ||
for (let i = 0; i < length; i++) { | ||
let value = object[i]; | ||
if (value && (typeof value === 'object' || position - start > chunkThreshold)) { | ||
if (iterateProperties.element) | ||
yield* encodeObjectAsIterable(value, iterateProperties.element); | ||
else | ||
yield* tryEncode(value, iterateProperties, 'element'); | ||
} else encode(value); | ||
} | ||
} else if (object[Symbol.iterator]) { | ||
target[position++] = 0x9f; // start indefinite array | ||
for (let value of object) { | ||
if (value && (typeof value === 'object' || position - start > chunkThreshold)) { | ||
if (iterateProperties.element) | ||
yield* encodeObjectAsIterable(value, iterateProperties.element); | ||
else | ||
yield* tryEncode(value, iterateProperties, 'element'); | ||
} else encode(value); | ||
} | ||
target[position++] = 0xff; // stop byte | ||
} else if (constructor === BlobConstructor){ | ||
writeEntityLength(object.size, 0x40); // encode as binary data | ||
yield target.subarray(start, position); | ||
yield object; // directly return blobs, they have to be encoded asynchronously | ||
restartEncoding(); | ||
} else if (object[Symbol.asyncIterator]) { | ||
target[position++] = 0x9f; // start indefinite array | ||
yield target.subarray(start, position); | ||
yield object; // directly return async iterators, they have to be encoded asynchronously | ||
restartEncoding(); | ||
target[position++] = 0xff; // stop byte | ||
} else { | ||
encode(object); | ||
} | ||
if (finalIterable && position > start) yield target.subarray(start, position); | ||
else if (position - start > chunkThreshold) { | ||
yield target.subarray(start, position); | ||
restartEncoding(); | ||
} | ||
} | ||
function* tryEncode(value, iterateProperties, key) { | ||
let restart = position - start; | ||
try { | ||
encode(value); | ||
if (position - start > chunkThreshold) { | ||
yield target.subarray(start, position); | ||
restartEncoding(); | ||
} | ||
} catch (error) { | ||
if (error.iteratorNotHandled) { | ||
iterateProperties[key] = {}; | ||
position = start + restart; // restart our position so we don't have partial data from last encode | ||
yield* encodeObjectAsIterable.call(this, value, iterateProperties[key]); | ||
} else throw error; | ||
} | ||
} | ||
function restartEncoding() { | ||
chunkThreshold = continuedChunkThreshold; | ||
encoder.encode(null, THROW_ON_ITERABLE); // restart encoding | ||
} | ||
function startEncoding(value, options, encodeIterable) { | ||
if (options && options.chunkThreshold) // explicitly specified chunk sizes | ||
chunkThreshold = continuedChunkThreshold = options.chunkThreshold; | ||
else // we start with a smaller threshold to get initial bytes sent quickly | ||
chunkThreshold = 100; | ||
if (value && typeof value === 'object') { | ||
encoder.encode(null, THROW_ON_ITERABLE); // start encoding | ||
return encodeIterable(value, encoder.iterateProperties || (encoder.iterateProperties = {}), true); | ||
} | ||
return [encoder.encode(value)]; | ||
} | ||
async function* encodeObjectAsAsyncIterable(value, iterateProperties) { | ||
for (let encodedValue of encodeObjectAsIterable(value, iterateProperties, true)) { | ||
let constructor = encodedValue.constructor; | ||
if (constructor === ByteArray || constructor === Uint8Array) | ||
yield encodedValue; | ||
else if (constructor === BlobConstructor) { | ||
let reader = encodedValue.stream().getReader(); | ||
let next; | ||
while (!(next = await reader.read()).done) { | ||
yield next.value; | ||
} | ||
} else if (encodedValue[Symbol.asyncIterator]) { | ||
for await (let asyncValue of encodedValue) { | ||
restartEncoding(); | ||
if (asyncValue) | ||
yield* encodeObjectAsAsyncIterable(asyncValue, iterateProperties.async || (iterateProperties.async = {})); | ||
else yield encoder.encode(asyncValue); | ||
} | ||
} else { | ||
yield encodedValue; | ||
} | ||
} | ||
} | ||
} | ||
@@ -786,2 +928,19 @@ useBuffer(buffer) { | ||
} | ||
function writeEntityLength(length, majorValue) { | ||
if (length < 0x18) | ||
target[position++] = majorValue | length | ||
else if (length < 0x100) { | ||
target[position++] = majorValue | 0x18 | ||
target[position++] = length | ||
} else if (length < 0x10000) { | ||
target[position++] = majorValue | 0x19 | ||
target[position++] = length >> 8 | ||
target[position++] = length & 0xff | ||
} else { | ||
target[position++] = majorValue | 0x1a | ||
targetView.setUint32(position, length) | ||
position += 4 | ||
} | ||
} | ||
class SharedData { | ||
@@ -1044,2 +1203,4 @@ constructor(structures, values, version) { | ||
export const encode = defaultEncoder.encode | ||
export const encodeAsIterable = defaultEncoder.encodeAsIterable | ||
export const encodeAsAsyncIterable = defaultEncoder.encodeAsAsyncIterable | ||
export { FLOAT32_OPTIONS } from './decode.js' | ||
@@ -1050,2 +1211,4 @@ import { FLOAT32_OPTIONS } from './decode.js' | ||
export const RESET_BUFFER_MODE = 1024 | ||
export const THROW_ON_ITERABLE = 2048 | ||
@@ -29,8 +29,10 @@ export enum FLOAT32_OPTIONS { | ||
tagUint8Array?: boolean | ||
pack?: boolean | ||
} | ||
interface Extension { | ||
Class: Function | ||
type ClassOf<T> = new (...args: any[]) => T; | ||
interface Extension<T, R> { | ||
Class: ClassOf<T> | ||
tag: number | ||
encode(value: any): Buffer | Uint8Array | ||
decode(messagePack: Buffer | Uint8Array): any | ||
encode(value: T, encodeFn: (data: R) => Uint8Array): Buffer | Uint8Array | ||
decode(item: R): T | ||
} | ||
@@ -44,3 +46,3 @@ export class Decoder { | ||
export function decodeMultiple(messagePack: Buffer | Uint8Array, forEach?: (value: any) => any): [] | void | ||
export function addExtension(extension: Extension): void | ||
export function addExtension<T, R>(extension: Extension<T, R>): void | ||
export function clearSource(): void | ||
@@ -54,2 +56,4 @@ export function roundFloat32(float32Number: number): number | ||
export function encode(value: any): Buffer | ||
export function encodeAsIterable(value: any): Iterable<Buffer | Blob | AsyncIterable<Buffer>> | ||
export function encodeAsAsyncIterable(value: any): AsyncIterable<Buffer> | ||
@@ -56,0 +60,0 @@ import { Transform, Readable } from 'stream' |
@@ -1,3 +0,3 @@ | ||
export { Encoder, addExtension, encode, NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT, REUSE_BUFFER_MODE } from './encode.js' | ||
export { Encoder, addExtension, encode, encodeAsIterable, encodeAsAsyncIterable, NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT, REUSE_BUFFER_MODE } from './encode.js' | ||
export { Tag, Decoder, decodeMultiple, decode, FLOAT32_OPTIONS, clearSource, roundFloat32, isNativeAccelerationEnabled } from './decode.js' | ||
export { decodeIter, encodeIter } from './iterators.js' |
@@ -1,2 +0,2 @@ | ||
export { Encoder, addExtension, encode, NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT, REUSE_BUFFER_MODE } from './encode.js' | ||
export { Encoder, addExtension, encode, encodeAsIterable, encodeAsAsyncIterable, NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT, REUSE_BUFFER_MODE } from './encode.js' | ||
export { Tag, Decoder, decodeMultiple, decode, FLOAT32_OPTIONS, clearSource, roundFloat32, isNativeAccelerationEnabled } from './decode.js' | ||
@@ -3,0 +3,0 @@ export { EncoderStream, DecoderStream } from './stream.js' |
{ | ||
"name": "cbor-x", | ||
"author": "Kris Zyp", | ||
"version": "1.4.1", | ||
"version": "1.5.0", | ||
"description": "Ultra-fast and conformant CBOR (RFC 8949) implementation with support for numerous tag extensions including records and structured cloning", | ||
@@ -67,6 +67,8 @@ "license": "MIT", | ||
"optionalDependencies": { | ||
"cbor-extract": "^2.0.2" | ||
"cbor-extract": "^2.1.1" | ||
}, | ||
"devDependencies": { | ||
"@rollup/plugin-json": "^4.1.0", | ||
"@rollup/plugin-json": "^5.0.1", | ||
"@rollup/plugin-replace": "^5.0.1", | ||
"@rollup/plugin-terser": "^0.1.0", | ||
"@types/node": "latest", | ||
@@ -79,6 +81,5 @@ "async": "^3", | ||
"esm": "^3.2.25", | ||
"mocha": "^8.1.3", | ||
"rollup": "^1.20.3", | ||
"rollup-plugin-babel-minify": "^9.0.0" | ||
"mocha": "^10.1.0", | ||
"rollup": "^3.2.5" | ||
} | ||
} |
@@ -55,2 +55,22 @@ # cbor-x | ||
### Iterables | ||
In addition to using CBOR with streams, CBOR can also encode to an iterable that can be iterated as a sequence of binary chunks with `encodeAsIterable`, which facilitates progressive encoding: | ||
```JavaScript | ||
import { encodeAsIterable } from 'cbor-x'; | ||
for (let binaryChunk of encodeAsIterable(data)){ | ||
// progressively get binary chunks as data is encoded | ||
} | ||
``` | ||
And `encodeAsAsyncIterable` is also available, which returns an async iterable, and can be used to encode data from async iterables as well as Blob data. | ||
```JavaScript | ||
import { encodeAsAsyncIterable } from 'cbor-x'; | ||
let data = { blob: new Blob(...) }; | ||
for await (let binaryChunk of encodeAsAsyncIterable(data)){ | ||
// progressively get binary chunks as asynchronous data source is encoded | ||
} | ||
``` | ||
## Deno Usage | ||
@@ -57,0 +77,0 @@ Cbor-x modules are standard ESM modules and can be loaded directly from the [deno.land registry for cbor](https://deno.land/x/cbor) for use in Deno. The standard pack/encode and unpack/decode functionality is available on Deno, like other platforms. |
@@ -1,3 +0,4 @@ | ||
import minify from "rollup-plugin-babel-minify"; | ||
import json from "@rollup/plugin-json"; | ||
import terser from '@rollup/plugin-terser'; | ||
import json from "@rollup/plugin-json"; | ||
import replace from "@rollup/plugin-replace"; | ||
@@ -10,3 +11,4 @@ export default [ | ||
file: "dist/node.cjs", | ||
format: "cjs" | ||
format: "cjs", | ||
sourcemap: true | ||
} | ||
@@ -20,16 +22,56 @@ ] | ||
format: "umd", | ||
name: "CBOR" | ||
name: "CBOR", | ||
sourcemap: true | ||
} | ||
}, | ||
}, | ||
{ | ||
input: "index.js", | ||
plugins: [minify({ | ||
})], | ||
plugins: [ | ||
replace({ Function: 'BlockedFunction '}) | ||
], | ||
output: { | ||
file: "dist/index-no-eval.cjs", | ||
format: "umd", | ||
name: "CBOR", | ||
sourcemap: true | ||
}, | ||
}, | ||
{ | ||
input: "decode.js", | ||
plugins: [ | ||
replace({ Function: 'BlockedFunction '}) | ||
], | ||
output: { | ||
file: "dist/decode-no-eval.cjs", | ||
format: "umd", | ||
name: "CBOR", | ||
sourcemap: true | ||
}, | ||
}, | ||
{ | ||
input: "index.js", | ||
plugins: [ | ||
terser({}) | ||
], | ||
output: { | ||
file: "dist/index.min.js", | ||
format: "umd", | ||
name: "CBOR" | ||
name: "CBOR", | ||
sourcemap: true | ||
} | ||
}, | ||
{ | ||
input: "index.js", | ||
plugins: [ | ||
replace({ Function: 'BlockedFunction '}), | ||
terser({}) | ||
], | ||
output: { | ||
file: "dist/index-no-eval.min.js", | ||
format: "umd", | ||
name: "CBOR", | ||
sourcemap: true | ||
} | ||
}, | ||
{ | ||
input: "tests/test.js", | ||
@@ -41,2 +83,3 @@ plugins: [json()], | ||
format: "iife", | ||
sourcemap: true, | ||
globals: { | ||
@@ -43,0 +86,0 @@ chai: 'chai', |
@@ -15,4 +15,6 @@ import { Transform } from 'stream' | ||
} | ||
_transform(value, encoding, callback) { | ||
this.push(this.encoder.encode(value)) | ||
async _transform(value, encoding, callback) { | ||
for await (let chunk of this.encoder.encodeAsAsyncIterable(value)) { | ||
this.push(chunk) | ||
} | ||
callback() | ||
@@ -19,0 +21,0 @@ } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1464162
31
11847
368
12