UNPKG

byte-encodings

Version:

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

2 lines (1 loc) 1.71 kB
var x={base64:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),base64url:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")},d={base64:new Uint8Array(128).fill(64),base64url:new Uint8Array(128).fill(64)};x.base64.forEach((n,t)=>d.base64[n]=t);x.base64url.forEach((n,t)=>d.base64url[n]=t);function y(n){return((n+2)/3|0)*4}function m(n,t,e,s,a){for(t+=2;t<n.length;t+=3){let r=n[t-2]<<16|n[t-1]<<8|n[t];n[e++]=s[r>>18],n[e++]=s[r>>12&63],n[e++]=s[r>>6&63],n[e++]=s[r&63]}switch(t){case n.length+1:{let r=n[t-2]<<16;n[e++]=s[r>>18],n[e++]=s[r>>12&63],n[e++]=a,n[e++]=a;break}case n.length:{let r=n[t-2]<<16|n[t-1]<<8;n[e++]=s[r>>18],n[e++]=s[r>>12&63],n[e++]=s[r>>6&63],n[e++]=a;break}}return e}function l(n,t,e,s,a){for(let r=n.length-2;r<n.length;++r)if(n[r]===a){for(let o=r+1;o<n.length;++o)if(n[o]!==a)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(n[o])})`);n=n.subarray(0,r);break}if((n.length-e)%4===1)throw new RangeError(`Cannot decode input as base64: Length (${n.length-e}), excluding padding, must not have a remainder of 1 when divided by 4`);for(t+=3;t<n.length;t+=4){let r=c(n[t-3],s)<<18|c(n[t-2],s)<<12|c(n[t-1],s)<<6|c(n[t],s);n[e++]=r>>16,n[e++]=r>>8&255,n[e++]=r&255}switch(t){case n.length+1:{let r=c(n[t-3],s)<<18|c(n[t-2],s)<<12;n[e++]=r>>16;break}case n.length:{let r=c(n[t-3],s)<<18|c(n[t-2],s)<<12|c(n[t-1],s)<<6;n[e++]=r>>16,n[e++]=r>>8&255;break}}return e}function c(n,t){let e=t[n]??64;if(e===64)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(n)})`);return e}export{x as a,d as b,y as c,m as d,l as e};