@cartbc/codecs-numbers
Version:
Codecs for numbers of different sizes and endianness
52 lines (47 loc) • 6.43 kB
JavaScript
this.globalThis = this.globalThis || {};
this.globalThis.cartesWeb3 = (function (exports) {
'use strict';
function u(e,r,o,t){if(t<r||t>o)throw new Error(`Codec [${e}] expected number to be in the range [${r}, ${o}], got ${t}.`)}var C=(o=>(o[o.LITTLE=0]="LITTLE",o[o.BIG=1]="BIG",o))(C||{});function a(e,r,o=0){if(r.length-o<=0)throw new Error(`Codec [${e}] cannot decode empty byte arrays.`)}function b(e,r,o,t=0){let d=o.length-t;if(d<r)throw new Error(`Codec [${e}] expected ${r} bytes, got ${d}.`)}function n(e,r,o){if(e.fixedSize!==r.fixedSize)throw new Error(`Encoder and decoder must have the same fixed size, got [${e.fixedSize}] and [${r.fixedSize}].`);if(e.maxSize!==r.maxSize)throw new Error(`Encoder and decoder must have the same max size, got [${e.maxSize}] and [${r.maxSize}].`);if(o===void 0&&e.description!==r.description)throw new Error(`Encoder and decoder must have the same description, got [${e.description}] and [${r.description}]. Pass a custom description as a third argument if you want to override the description and bypass this error.`);return {decode:r.decode,description:o??e.description,encode:e.encode,fixedSize:e.fixedSize,maxSize:e.maxSize}}function p(e){let r,o=e.name;return e.size>1&&(r=!("endian"in e.options)||e.options.endian===0,o+=r?"(le)":"(be)"),{description:e.options.description??o,fixedSize:e.size,littleEndian:r,maxSize:e.size}}function i(e){let r=p(e);return {description:r.description,encode(o){e.range&&u(e.name,e.range[0],e.range[1],o);let t=new ArrayBuffer(e.size);return e.set(new DataView(t),o,r.littleEndian),new Uint8Array(t)},fixedSize:r.fixedSize,maxSize:r.maxSize}}function c(e){let r=p(e);return {decode(o,t=0){a(r.description,o,t),b(r.description,e.size,o,t);let d=new DataView(x(o,t,e.size));return [e.get(d,r.littleEndian),t+e.size]},description:r.description,fixedSize:r.fixedSize,maxSize:r.maxSize}}function x(e,r,o){let t=e.byteOffset+(r??0),d=o??e.byteLength;return e.buffer.slice(t,t+d)}var E=(e={})=>i({name:"f32",options:e,set:(r,o,t)=>r.setFloat32(0,o,t),size:4}),z=(e={})=>c({get:(r,o)=>r.getFloat32(0,o),name:"f32",options:e,size:4}),me=(e={})=>n(E(e),z(e));var N=(e={})=>i({name:"f64",options:e,set:(r,o,t)=>r.setFloat64(0,o,t),size:8}),D=(e={})=>c({get:(r,o)=>r.getFloat64(0,o),name:"f64",options:e,size:8}),xe=(e={})=>n(N(e),D(e));var O=(e={})=>i({name:"i128",options:e,range:[-BigInt("0x7fffffffffffffffffffffffffffffff")-1n,BigInt("0x7fffffffffffffffffffffffffffffff")],set:(r,o,t)=>{let d=t?8:0,m=t?0:8,s=0xffffffffffffffffn;r.setBigInt64(d,BigInt(o)>>64n,t),r.setBigUint64(m,BigInt(o)&s,t);},size:16}),y=(e={})=>c({get:(r,o)=>{let t=o?8:0,d=o?0:8,m=r.getBigInt64(t,o),s=r.getBigUint64(d,o);return (m<<64n)+s},name:"i128",options:e,size:16}),Se=(e={})=>n(O(e),y(e));var l=(e={})=>i({name:"i16",options:e,range:[-+"0x7fff"-1,+"0x7fff"],set:(r,o,t)=>r.setInt16(0,o,t),size:2}),S=(e={})=>c({get:(r,o)=>r.getInt16(0,o),name:"i16",options:e,size:2}),Te=(e={})=>n(l(e),S(e));var h=(e={})=>i({name:"i32",options:e,range:[-+"0x7fffffff"-1,+"0x7fffffff"],set:(r,o,t)=>r.setInt32(0,o,t),size:4}),B=(e={})=>c({get:(r,o)=>r.getInt32(0,o),name:"i32",options:e,size:4}),Me=(e={})=>n(h(e),B(e));var I=(e={})=>i({name:"i64",options:e,range:[-BigInt("0x7fffffffffffffff")-1n,BigInt("0x7fffffffffffffff")],set:(r,o,t)=>r.setBigInt64(0,BigInt(o),t),size:8}),F=(e={})=>c({get:(r,o)=>r.getBigInt64(0,o),name:"i64",options:e,size:8}),Re=(e={})=>n(I(e),F(e));var U=(e={})=>i({name:"i8",options:e,range:[-+"0x7f"-1,+"0x7f"],set:(r,o)=>r.setInt8(0,o),size:1}),w=(e={})=>c({get:r=>r.getInt8(0),name:"i8",options:e,size:1}),tr=(e={})=>n(U(e),w(e));var v=(e={})=>({description:e.description??"shortU16",encode:r=>{u("shortU16",0,65535,r);let o=[0];for(let t=0;;t+=1){let d=r>>t*7;if(d===0)break;let m=127&d;o[t]=m,t>0&&(o[t-1]|=128);}return new Uint8Array(o)},fixedSize:null,maxSize:3}),T=(e={})=>({decode:(r,o=0)=>{let t=0,d=0;for(;++d;){let m=d-1,s=r[o+m],g=127&s;if(t|=g<<m*7,!(s&128))break}return [t,o+d]},description:e.description??"shortU16",fixedSize:null,maxSize:3}),ar=(e={})=>n(v(e),T(e));var $=(e={})=>i({name:"u128",options:e,range:[0,BigInt("0xffffffffffffffffffffffffffffffff")],set:(r,o,t)=>{let d=t?8:0,m=t?0:8,s=0xffffffffffffffffn;r.setBigUint64(d,BigInt(o)>>64n,t),r.setBigUint64(m,BigInt(o)&s,t);},size:16}),A=(e={})=>c({get:(r,o)=>{let t=o?8:0,d=o?0:8,m=r.getBigUint64(t,o),s=r.getBigUint64(d,o);return (m<<64n)+s},name:"u128",options:e,size:16}),Nr=(e={})=>n($(e),A(e));var L=(e={})=>i({name:"u16",options:e,range:[0,+"0xffff"],set:(r,o,t)=>r.setUint16(0,o,t),size:2}),V=(e={})=>c({get:(r,o)=>r.getUint16(0,o),name:"u16",options:e,size:2}),Ir=(e={})=>n(L(e),V(e));var _=(e={})=>i({name:"u32",options:e,range:[0,+"0xffffffff"],set:(r,o,t)=>r.setUint32(0,o,t),size:4}),k=(e={})=>c({get:(r,o)=>r.getUint32(0,o),name:"u32",options:e,size:4}),Lr=(e={})=>n(_(e),k(e));var H=(e={})=>i({name:"u64",options:e,range:[0,BigInt("0xffffffffffffffff")],set:(r,o,t)=>r.setBigUint64(0,BigInt(o),t),size:8}),M=(e={})=>c({get:(r,o)=>r.getBigUint64(0,o),name:"u64",options:e,size:8}),jr=(e={})=>n(H(e),M(e));var G=(e={})=>i({name:"u8",options:e,range:[0,+"0xff"],set:(r,o)=>r.setUint8(0,o),size:1}),P=(e={})=>c({get:r=>r.getUint8(0),name:"u8",options:e,size:1}),Yr=(e={})=>n(G(e),P(e));
exports.Endian = C;
exports.assertNumberIsBetweenForCodec = u;
exports.getF32Codec = me;
exports.getF32Decoder = z;
exports.getF32Encoder = E;
exports.getF64Codec = xe;
exports.getF64Decoder = D;
exports.getF64Encoder = N;
exports.getI128Codec = Se;
exports.getI128Decoder = y;
exports.getI128Encoder = O;
exports.getI16Codec = Te;
exports.getI16Decoder = S;
exports.getI16Encoder = l;
exports.getI32Codec = Me;
exports.getI32Decoder = B;
exports.getI32Encoder = h;
exports.getI64Codec = Re;
exports.getI64Decoder = F;
exports.getI64Encoder = I;
exports.getI8Codec = tr;
exports.getI8Decoder = w;
exports.getI8Encoder = U;
exports.getShortU16Codec = ar;
exports.getShortU16Decoder = T;
exports.getShortU16Encoder = v;
exports.getU128Codec = Nr;
exports.getU128Decoder = A;
exports.getU128Encoder = $;
exports.getU16Codec = Ir;
exports.getU16Decoder = V;
exports.getU16Encoder = L;
exports.getU32Codec = Lr;
exports.getU32Decoder = k;
exports.getU32Encoder = _;
exports.getU64Codec = jr;
exports.getU64Decoder = M;
exports.getU64Encoder = H;
exports.getU8Codec = Yr;
exports.getU8Decoder = P;
exports.getU8Encoder = G;
return exports;
})({});