@cartbc/codecs-strings
Version:
Codecs for strings of different sizes and encodings
38 lines (33 loc) • 7.27 kB
JavaScript
this.globalThis = this.globalThis || {};
this.globalThis.cartesWeb3 = (function (exports) {
'use strict';
function u(e,r,t=r){if(!r.match(new RegExp(`^[${e}]*$`)))throw new Error(`Expected a string of base ${e.length}, got [${t}].`)}function S(e,r,t=0){if(r.length-t<=0)throw new Error(`Codec [${e}] cannot decode empty byte arrays.`)}function x(e,r,t,n=0){let i=t.length-n;if(i<r)throw new Error(`Codec [${e}] expected ${r} bytes, got ${i}.`)}var I=e=>{let r=e.filter(o=>o.length);if(r.length===0)return e.length?e[0]:new Uint8Array;if(r.length===1)return r[0];let t=r.reduce((o,c)=>o+c.length,0),n=new Uint8Array(t),i=0;return r.forEach(o=>{n.set(o,i),i+=o.length;}),n},H=(e,r)=>{if(e.length>=r)return e;let t=new Uint8Array(r).fill(0);return t.set(e),t},U=(e,r)=>H(e.length<=r?e:e.slice(0,r),r);function d(e,r,t){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(t===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:t??e.description,encode:e.encode,fixedSize:e.fixedSize,maxSize:e.maxSize}}function y(e,r,t){return {description:t??`fixed(${r}, ${e.description})`,fixedSize:r,maxSize:r}}function w(e,r,t){return {...y(e,r,t),encode:n=>U(e.encode(n),r)}}function N(e,r,t){return {...y(e,r,t),decode:(n,i=0)=>{x("fixCodec",r,n,i),(i>0||n.length>r)&&(n=n.slice(i,i+r)),e.fixedSize!==null&&(n=U(n,e.fixedSize));let[o]=e.decode(n,0);return [o,i+r]}}}var z=e=>{let r=e.length,t=BigInt(r);return {description:`base${r}`,encode(n){if(u(e,n),n==="")return new Uint8Array;let i=[...n],o=i.findIndex(g=>g!==e[0]);o=o===-1?i.length:o;let c=Array(o).fill(0);if(o===i.length)return Uint8Array.from(c);let a=i.slice(o),s=0n,m=1n;for(let g=a.length-1;g>=0;g-=1)s+=m*BigInt(e.indexOf(a[g])),m*=t;let l=[];for(;s>0n;)l.unshift(Number(s%256n)),s/=256n;return Uint8Array.from(c.concat(l))},fixedSize:null,maxSize:null}},p=e=>{let r=e.length,t=BigInt(r);return {decode(n,i=0){let o=i===0?n:n.slice(i);if(o.length===0)return ["",0];let c=o.findIndex(l=>l!==0);c=c===-1?o.length:c;let a=e[0].repeat(c);if(c===o.length)return [a,n.length];let s=o.slice(c).reduce((l,g)=>l*256n+BigInt(g),0n),m=[];for(;s>0n;)m.unshift(e[Number(s%t)]),s/=t;return [a+m.join(""),n.length]},description:`base${r}`,fixedSize:null,maxSize:null}},h=e=>d(z(e),p(e));var E="0123456789",me=()=>z(E),le=()=>p(E),ue=()=>h(E);var P=()=>({description:"base16",encode(e){let r=e.toLowerCase();u("0123456789abcdef",r,e);let t=r.match(/.{1,2}/g);return Uint8Array.from(t?t.map(n=>parseInt(n,16)):[])},fixedSize:null,maxSize:null}),W=()=>({decode(e,r=0){return [e.slice(r).reduce((n,i)=>n+i.toString(16).padStart(2,"0"),""),e.length]},description:"base16",fixedSize:null,maxSize:null}),Be=()=>d(P(),W());var C="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Ie=()=>z(C),Ue=()=>p(C),ye=()=>h(C);var B=(e,r)=>({description:`base${e.length}`,encode(t){if(u(e,t),t==="")return new Uint8Array;let n=[...t].map(i=>e.indexOf(i));return new Uint8Array(O(n,r,8,!1))},fixedSize:null,maxSize:null}),b=(e,r)=>({decode(t,n=0){let i=n===0?t:t.slice(n);return i.length===0?["",t.length]:[O([...i],8,r,!0).map(c=>e[c]).join(""),t.length]},description:`base${e.length}`,fixedSize:null,maxSize:null}),Te=(e,r)=>d(B(e,r),b(e,r));function O(e,r,t,n){let i=[],o=0,c=0,a=(1<<t)-1;for(let s of e)for(o=o<<r|s,c+=r;c>=t;)c-=t,i.push(o>>c&a);return n&&c>0&&i.push(o<<t-c&a),i}var j=()=>({description:"base64",encode(e){try{let r=atob(e).split("").map(t=>t.charCodeAt(0));return new Uint8Array(r)}catch{throw new Error(`Expected a string of base 64, got [${e}].`)}},fixedSize:null,maxSize:null}),M=()=>({decode(e,r=0){let t=e.slice(r);return [btoa(String.fromCharCode(...t)),e.length]},description:"base64",fixedSize:null,maxSize:null}),Pe=()=>d(j(),M());var _=e=>e.replace(/\u0000/g,""),Me=(e,r)=>e.padEnd(r,"\0");function G(e,r,t,n){if(n<r||n>t)throw new Error(`Codec [${e}] expected number to be in the range [${r}, ${t}], got ${n}.`)}function T(e){let r,t=e.name;return e.size>1&&(r=!("endian"in e.options)||e.options.endian===0,t+=r?"(le)":"(be)"),{description:e.options.description??t,fixedSize:e.size,littleEndian:r,maxSize:e.size}}function J(e){let r=T(e);return {description:r.description,encode(t){e.range&&G(e.name,e.range[0],e.range[1],t);let n=new ArrayBuffer(e.size);return e.set(new DataView(n),t,r.littleEndian),new Uint8Array(n)},fixedSize:r.fixedSize,maxSize:r.maxSize}}function Z(e){let r=T(e);return {decode(t,n=0){S(r.description,t,n),x(r.description,e.size,t,n);let i=new DataView(q(t,n,e.size));return [e.get(i,r.littleEndian),n+e.size]},description:r.description,fixedSize:r.fixedSize,maxSize:r.maxSize}}function q(e,r,t){let n=e.byteOffset+(r??0),i=t??e.byteLength;return e.buffer.slice(n,n+i)}var X=(e={})=>J({name:"u32",options:e,range:[0,+"0xffffffff"],set:(r,t,n)=>r.setUint32(0,t,n),size:4}),V=(e={})=>Z({get:(r,t)=>r.getUint32(0,t),name:"u32",options:e,size:4});var R=globalThis.TextDecoder,L=globalThis.TextEncoder;var v=()=>{let e;return {description:"utf8",encode:r=>new Uint8Array((e||(e=new L)).encode(r)),fixedSize:null,maxSize:null}},D=()=>{let e;return {decode(r,t=0){let n=(e||(e=new R)).decode(r.slice(t));return [_(n),r.length]},description:"utf8",fixedSize:null,maxSize:null}},cr=()=>d(v(),D());var K=(e={})=>{let r=e.size??X(),t=e.encoding??v(),n=e.description??`string(${t.description}; ${k(r)})`;return r==="variable"?{...t,description:n}:typeof r=="number"?w(t,r,n):{description:n,encode:i=>{let o=t.encode(i),c=r.encode(o.length);return I([c,o])},fixedSize:null,maxSize:null}},Q=(e={})=>{let r=e.size??V(),t=e.encoding??D(),n=e.description??`string(${t.description}; ${k(r)})`;return r==="variable"?{...t,description:n}:typeof r=="number"?N(t,r,n):{decode:(i,o=0)=>{S("string",i,o);let[c,a]=r.decode(i,o),s=Number(c);o=a;let m=i.slice(o,o+s);x("string",s,m);let[l,g]=t.decode(m);return o+=g,[l,o]},description:n,fixedSize:null,maxSize:null}},Er=(e={})=>d(K(e),Q(e));function k(e){return typeof e=="object"?e.description:`${e}`}
exports.assertValidBaseString = u;
exports.getBase10Codec = ue;
exports.getBase10Decoder = le;
exports.getBase10Encoder = me;
exports.getBase16Codec = Be;
exports.getBase16Decoder = W;
exports.getBase16Encoder = P;
exports.getBase58Codec = ye;
exports.getBase58Decoder = Ue;
exports.getBase58Encoder = Ie;
exports.getBase64Codec = Pe;
exports.getBase64Decoder = M;
exports.getBase64Encoder = j;
exports.getBaseXCodec = h;
exports.getBaseXDecoder = p;
exports.getBaseXEncoder = z;
exports.getBaseXResliceCodec = Te;
exports.getBaseXResliceDecoder = b;
exports.getBaseXResliceEncoder = B;
exports.getStringCodec = Er;
exports.getStringDecoder = Q;
exports.getStringEncoder = K;
exports.getUtf8Codec = cr;
exports.getUtf8Decoder = D;
exports.getUtf8Encoder = v;
exports.padNullCharacters = Me;
exports.removeNullCharacters = _;
return exports;
})({});