UNPKG

byte-encodings

Version:

Utilities for encoding and decoding common formats like hex, base64, and varint. Ported from Deno's @std/encoding.

4 lines (3 loc) 12.8 kB
var F=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var nn=(n,e)=>{for(var t in e)F(n,t,{get:e[t],enumerable:!0})},en=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of b(e))!f.call(n,c)&&c!==t&&F(n,c,{get:()=>e[c],enumerable:!(r=q(e,c))||r.enumerable});return n};var tn=n=>en(F({},"__esModule",{value:!0}),n);var kn={};nn(kn,{MaxUint64:()=>Fn,MaxVarintLen32:()=>Yn,MaxVarintLen64:()=>Xn,decodeAscii85:()=>sn,decodeBase32:()=>yn,decodeBase58:()=>An,decodeBase64:()=>mn,decodeBase64Url:()=>Un,decodeHex:()=>En,decodeVarint:()=>Bn,decodeVarint32:()=>Cn,encodeAscii85:()=>cn,encodeBase32:()=>an,encodeBase58:()=>xn,encodeBase64:()=>pn,encodeBase64Url:()=>gn,encodeHex:()=>wn,encodeVarint:()=>Tn});module.exports=tn(kn);var rn=new TextEncoder;function on(n){var t;let e=typeof n;return e!=="object"?e:n===null?"null":((t=n==null?void 0:n.constructor)==null?void 0:t.name)??"object"}function U(n){if(typeof n=="string")return rn.encode(n);if(n instanceof Uint8Array)return n;if(n instanceof ArrayBuffer)return new Uint8Array(n);throw new TypeError(`Cannot validate the input as it must be a Uint8Array, a string, or an ArrayBuffer: received a value of the type ${on(n)}`)}var k="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~",v="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#";function cn(n,e={}){let t=U(n),{standard:r="Adobe"}=e,c=[],o,s=0,y=0;if(t.length%4!==0){let i=t;y=4-i.length%4,t=new Uint8Array(i.length+y),t.set(i)}let l=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let i=0;i<t.length;i+=4){if(o=l.getUint32(i),(r==="Adobe"||r==="btoa")&&o===0&&i<t.length-y-3){c[s++]="z";continue}if(r==="btoa"&&o===538976288){c[s++]="y";continue}for(let x=4;x>=0;x--)c[s+x]=String.fromCharCode(o%85+33),o=Math.trunc(o/85);s+=5}switch(r){case"Adobe":if(e!=null&&e.delimiter)return`<~${c.slice(0,c.length-y).join("")}~>`;break;case"btoa":if(e!=null&&e.delimiter)return`xbtoa Begin ${c.slice(0,c.length-y).join("")} xbtoa End`;break;case"RFC 1924":c=c.map(i=>k[i.charCodeAt(0)-33]);break;case"Z85":c=c.map(i=>v[i.charCodeAt(0)-33]);break}return c.slice(0,c.length-y).join("")}function sn(n,e={}){let{standard:t="Adobe"}=e;switch(t){case"Adobe":n=n.replaceAll(/(<~|~>)/g,"").replaceAll("z","!!!!!");break;case"btoa":n=n.replaceAll(/(xbtoa Begin|xbtoa End|\n)/g,"").replaceAll("z","!!!!!").replaceAll("y","+<VdL");break;case"RFC 1924":n=n.replaceAll(/./g,i=>String.fromCharCode(k.indexOf(i)+33));break;case"Z85":n=n.replaceAll(/./g,i=>String.fromCharCode(v.indexOf(i)+33));break}n=n.replaceAll(/[^!-u]/g,"");let r=n.length,c=new Uint8Array(r+4-r%4),o=new DataView(c.buffer),s=0,y=0,l=0;for(let i=0;i<r;){for(l+=5;i<l;i++)s=s*85+(i<r?n.charCodeAt(i):117)-33;o.setUint32(y,s),s=0,y+=4}return c.slice(0,Math.trunc(r*.8))}var _={base32:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),base32hex:new TextEncoder().encode("0123456789ABCDEFGHIJKLMNOPQRSTUV"),base32crockford:new TextEncoder().encode("0123456789ABCDEFGHJKMNPQRSTVWXYZ")},B={base32:new Uint8Array(128).fill(32),base32hex:new Uint8Array(128).fill(32),base32crockford:new Uint8Array(128).fill(32)};_.base32.forEach((n,e)=>B.base32[n]=e);_.base32hex.forEach((n,e)=>B.base32hex[n]=e);_.base32crockford.forEach((n,e)=>B.base32crockford[n]=e);function S(n){return((n+4)/5|0)*8}function M(n,e,t,r,c){for(e+=4;e<n.length;e+=5){let o=n[e-4]<<16|n[e-3]<<8|n[e-2];n[t++]=r[o>>19],n[t++]=r[o>>14&31],n[t++]=r[o>>9&31],n[t++]=r[o>>4&31],o=o<<16|n[e-1]<<8|n[e],n[t++]=r[o>>15&31],n[t++]=r[o>>10&31],n[t++]=r[o>>5&31],n[t++]=r[o&31]}switch(e){case n.length+3:{let o=n[e-4]<<16;n[t++]=r[o>>19],n[t++]=r[o>>14&31],n[t++]=c,n[t++]=c,n[t++]=c,n[t++]=c,n[t++]=c,n[t++]=c;break}case n.length+2:{let o=n[e-4]<<16|n[e-3]<<8;n[t++]=r[o>>19],n[t++]=r[o>>14&31],n[t++]=r[o>>9&31],n[t++]=r[o>>4&31],n[t++]=c,n[t++]=c,n[t++]=c,n[t++]=c;break}case n.length+1:{let o=n[e-4]<<16|n[e-3]<<8|n[e-2];n[t++]=r[o>>19],n[t++]=r[o>>14&31],n[t++]=r[o>>9&31],n[t++]=r[o>>4&31],o<<=16,n[t++]=r[o>>15&31],n[t++]=c,n[t++]=c,n[t++]=c;break}case n.length:{let o=n[e-4]<<16|n[e-3]<<8|n[e-2];n[t++]=r[o>>19],n[t++]=r[o>>14&31],n[t++]=r[o>>9&31],n[t++]=r[o>>4&31],o=o<<16|n[e-1]<<8,n[t++]=r[o>>15&31],n[t++]=r[o>>10&31],n[t++]=r[o>>5&31],n[t++]=c;break}}return t}function R(n,e,t,r,c){for(let o=n.length-6;o<n.length;++o)if(n[o]===c){for(let s=o+1;s<n.length;++s)if(n[s]!==c)throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(n[s])})`);n=n.subarray(0,o);break}switch((n.length-t)%8){case 6:case 3:case 1:throw new RangeError(`Cannot decode input as base32: Length (${n.length-t}), excluding padding, must not have a remainder of 1, 3, or 6 when divided by 8`)}for(e+=7;e<n.length;e+=8){let o=a(n[e-7],r)<<19|a(n[e-6],r)<<14|a(n[e-5],r)<<9|a(n[e-4],r)<<4;n[t++]=o>>16,n[t++]=o>>8&255,o=o<<16|a(n[e-3],r)<<15|a(n[e-2],r)<<10|a(n[e-1],r)<<5|a(n[e],r),n[t++]=o>>16&255,n[t++]=o>>8&255,n[t++]=o&255}switch(e){case n.length+5:{let o=a(n[e-7],r)<<19|a(n[e-6],r)<<14;n[t++]=o>>16;break}case n.length+3:{let o=a(n[e-7],r)<<19|a(n[e-6],r)<<14|a(n[e-5],r)<<9|a(n[e-4],r)<<4;n[t++]=o>>16,n[t++]=o>>8&255;break}case n.length+2:{let o=a(n[e-7],r)<<19|a(n[e-6],r)<<14|a(n[e-5],r)<<9|a(n[e-4],r)<<4;n[t++]=o>>16,n[t++]=o>>8&255,o=o<<16|a(n[e-3],r)<<15,n[t++]=o>>16&255;break}case n.length:{let o=a(n[e-7],r)<<19|a(n[e-6],r)<<14|a(n[e-5],r)<<9|a(n[e-4],r)<<4;n[t++]=o>>16,n[t++]=o>>8&255,o=o<<16|a(n[e-3],r)<<15|a(n[e-2],r)<<10|a(n[e-1],r)<<5,n[t++]=o>>16&255,n[t++]=o>>8&255;break}}return t}function a(n,e){let t=e[n]??32;if(t===32)throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(n)})`);return t}function m(n,e){let t=n.length;if(n.byteOffset){let r=new Uint8Array(n.buffer);r.set(n),n=r.subarray(0,t)}return n=new Uint8Array(n.buffer.transfer(e)),n.set(n.subarray(0,t),e-t),[n,e-t]}var D=61,I=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),V=new Uint8Array(128).fill(32);I.forEach((n,e)=>V[n]=e);function an(n){typeof n=="string"?n=new TextEncoder().encode(n):n instanceof ArrayBuffer?n=new Uint8Array(n).slice():n=n.slice();let[e,t]=m(n,S(n.length));return M(e,t,0,I,D),new TextDecoder().decode(e)}function yn(n){let e=new TextEncoder().encode(n);if(e.length%8)throw new TypeError(`Invalid base32 string: length (${e.length}) must be a multiple of 8`);return new Uint8Array(e.buffer.transfer(R(e,0,0,V,D)))}var dn={1:0,2:1,3:2,4:3,5:4,6:5,7:6,8:7,9:8,A:9,B:10,C:11,D:12,E:13,F:14,G:15,H:16,J:17,K:18,L:19,M:20,N:21,P:22,Q:23,R:24,S:25,T:26,U:27,V:28,W:29,X:30,Y:31,Z:32,a:33,b:34,c:35,d:36,e:37,f:38,g:39,h:40,i:41,j:42,k:43,m:44,n:45,o:46,p:47,q:48,r:49,s:50,t:51,u:52,v:53,w:54,x:55,y:56,z:57},ln="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split("");function xn(n){let e=U(n),t=0,r=0,c=0;for(;e[c]===0;)r++,c++;let o=e.slice(c),s=Math.round(e.length*138/100+1),y=[];o.forEach(i=>{let x=0,d=i;for(let p=s-1;(d>0||x<t)&&p!==-1;p--,x++)d+=(y[p]??0)*256,y[p]=Math.round(d%58),d=Math.floor(d/58);t=x});let l=Array.from({length:y.length+r});return r>0&&l.fill("1",0,r),y.forEach(i=>l.push(ln[i])),l.join("")}function An(n){let e=n.trim().split(""),t=0,r=0,c=0;for(;e[c]==="1";)r++,c++;let o=e.slice(c),s=Math.round(n.length*733/1e3+1),y=[];o.forEach((i,x)=>{let d=dn[i],p=0;if(d===void 0)throw new TypeError(`Invalid base58 char at index ${x} with value ${i}`);for(let g=s-1;(d>0||p<t)&&g!==-1;g--,p++)d+=58*(y[g]??0),y[g]=Math.round(d%256),d=Math.floor(d/256);t=p});let l=y.filter(i=>i!==void 0);if(r>0){let i=Array.from({length:r}).fill(0,0,r);return new Uint8Array([...i,...l])}return new Uint8Array(l)}var L={base64:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),base64url:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")},u={base64:new Uint8Array(128).fill(64),base64url:new Uint8Array(128).fill(64)};L.base64.forEach((n,e)=>u.base64[n]=e);L.base64url.forEach((n,e)=>u.base64url[n]=e);function h(n){return((n+2)/3|0)*4}function w(n,e,t,r,c){for(e+=2;e<n.length;e+=3){let o=n[e-2]<<16|n[e-1]<<8|n[e];n[t++]=r[o>>18],n[t++]=r[o>>12&63],n[t++]=r[o>>6&63],n[t++]=r[o&63]}switch(e){case n.length+1:{let o=n[e-2]<<16;n[t++]=r[o>>18],n[t++]=r[o>>12&63],n[t++]=c,n[t++]=c;break}case n.length:{let o=n[e-2]<<16|n[e-1]<<8;n[t++]=r[o>>18],n[t++]=r[o>>12&63],n[t++]=r[o>>6&63],n[t++]=c;break}}return t}function E(n,e,t,r,c){for(let o=n.length-2;o<n.length;++o)if(n[o]===c){for(let s=o+1;s<n.length;++s)if(n[s]!==c)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(n[s])})`);n=n.subarray(0,o);break}if((n.length-t)%4===1)throw new RangeError(`Cannot decode input as base64: Length (${n.length-t}), excluding padding, must not have a remainder of 1 when divided by 4`);for(e+=3;e<n.length;e+=4){let o=A(n[e-3],r)<<18|A(n[e-2],r)<<12|A(n[e-1],r)<<6|A(n[e],r);n[t++]=o>>16,n[t++]=o>>8&255,n[t++]=o&255}switch(e){case n.length+1:{let o=A(n[e-3],r)<<18|A(n[e-2],r)<<12;n[t++]=o>>16;break}case n.length:{let o=A(n[e-3],r)<<18|A(n[e-2],r)<<12|A(n[e-1],r)<<6;n[t++]=o>>16,n[t++]=o>>8&255;break}}return t}function A(n,e){let t=e[n]??64;if(t===64)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(n)})`);return t}var O=61,z=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),H=new Uint8Array(128).fill(64);z.forEach((n,e)=>H[n]=e);function pn(n){typeof n=="string"?n=new TextEncoder().encode(n):n instanceof ArrayBuffer?n=new Uint8Array(n).slice():n=n.slice();let[e,t]=m(n,h(n.length));return w(e,t,0,z,O),new TextDecoder().decode(e)}function mn(n){let e=new TextEncoder().encode(n);return new Uint8Array(e.buffer.transfer(E(e,0,0,H,O)))}var C=61,N=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),$=new Uint8Array(128).fill(64);N.forEach((n,e)=>$[n]=e);function gn(n){typeof n=="string"?n=new TextEncoder().encode(n):n instanceof ArrayBuffer?n=new Uint8Array(n).slice():n=n.slice();let[e,t]=m(n,h(n.length)),r=w(e,t,0,N,C);return r=e.indexOf(C,r-2),new TextDecoder().decode(r>0?new Uint8Array(e.buffer.transfer(r)):e)}function Un(n){let e=new TextEncoder().encode(n);return new Uint8Array(e.buffer.transfer(E(e,0,0,$,C)))}var hn=new TextEncoder().encode("0123456789abcdef"),j=new Uint8Array(128).fill(16);hn.forEach((n,e)=>j[n]=e);new TextEncoder().encode("ABCDEF").forEach((n,e)=>j[n]=e+10);function W(n){return n*2}function G(n,e,t,r){for(;e<n.length;++e){let c=n[e];n[t++]=r[c>>4],n[t++]=r[c&15]}return t}function J(n,e,t,r){if((n.length-t)%2===1)throw new RangeError(`Cannot decode input as hex: Length (${n.length-t}) must be divisible by 2`);for(e+=1;e<n.length;e+=2)n[t++]=Z(n[e-1],r)<<4|Z(n[e],r);return t}function Z(n,e){let t=e[n]??16;if(t===16)throw new TypeError(`Cannot decode input as hex: Invalid character (${String.fromCharCode(n)})`);return t}var K=new TextEncoder().encode("0123456789abcdef"),T=new Uint8Array(128).fill(16);K.forEach((n,e)=>T[n]=e);new TextEncoder().encode("ABCDEF").forEach((n,e)=>T[n]=e+10);function wn(n){typeof n=="string"?n=new TextEncoder().encode(n):n instanceof ArrayBuffer?n=new Uint8Array(n).slice():n=n.slice();let[e,t]=m(n,W(n.length));return G(e,t,0,K),new TextDecoder().decode(e)}function En(n){let e=new TextEncoder().encode(n);return new Uint8Array(e.buffer.transfer(J(e,0,0,T)))}var Fn=18446744073709551615n,Xn=10,Yn=5;var P=0x80n,_n=7n,Y=new ArrayBuffer(8),Q=new Uint32Array(Y),X=new BigUint64Array(Y);function Bn(n,e=0){X[0]=0n;let t=0,r=0,c=e;if(n.length===0)throw new RangeError("Cannot read empty buffer");let o;do o=n[c],t|=(o&127)<<r,r===28&&(Q[0]=t,t=(o&112)>>>4,r=-4),r+=7,c++;while((o&128)===128);let s=c-e;if(s===10&&t>-1||s===11||c>n.length)throw new RangeError("Cannot decode the varint input: Malformed or overflow varint");return Q[+(s>4)]=t,[X[0],c]}function Cn(n,e=0){let t=0,r=0;for(let c=e;c<=Math.min(n.length,e+5);c+=1,t+=7){let o=n[c];if(r+=(o&127)*Math.pow(2,t),!(o&128))return[r,c+1]}throw new RangeError("Cannot decode the varint input: Malformed or overflow varint")}function Tn(n,e=new Uint8Array(10),t=0){if(n=BigInt(n),n<0n)throw new RangeError(`Cannot encode the input into varint as it should be non-negative integer: received ${n}`);for(let r=t;r<=Math.min(e.length,10);r+=1){if(n<P)return e[r]=Number(n),r+=1,[e.slice(t,r),r];e[r]=Number(n&0xFFn|P),n>>=_n}throw new RangeError(`Cannot encode the input ${n} into varint as it overflows uint64`)}0&&(module.exports={MaxUint64,MaxVarintLen32,MaxVarintLen64,decodeAscii85,decodeBase32,decodeBase58,decodeBase64,decodeBase64Url,decodeHex,decodeVarint,decodeVarint32,encodeAscii85,encodeBase32,encodeBase58,encodeBase64,encodeBase64Url,encodeHex,encodeVarint});