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) • 4.13 kB
JavaScript
var y=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var T=(n,t)=>{for(var s in t)y(n,s,{get:t[s],enumerable:!0})},C=(n,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let x of B(t))!k.call(n,x)&&x!==s&&y(n,x,{get:()=>t[x],enumerable:!(r=_(t,x))||r.enumerable});return n};var a=n=>C(y({},"__esModule",{value:!0}),n);var S={};T(S,{decodeBase32:()=>R,encodeBase32:()=>l});module.exports=a(S);var F={base32:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),base32hex:new TextEncoder().encode("0123456789ABCDEFGHIJKLMNOPQRSTUV"),base32crockford:new TextEncoder().encode("0123456789ABCDEFGHJKMNPQRSTVWXYZ")},A={base32:new Uint8Array(128).fill(32),base32hex:new Uint8Array(128).fill(32),base32crockford:new Uint8Array(128).fill(32)};F.base32.forEach((n,t)=>A.base32[n]=t);F.base32hex.forEach((n,t)=>A.base32hex[n]=t);F.base32crockford.forEach((n,t)=>A.base32crockford[n]=t);function U(n){return((n+4)/5|0)*8}function m(n,t,s,r,x){for(t+=4;t<n.length;t+=5){let c=n[t-4]<<16|n[t-3]<<8|n[t-2];n[s++]=r[c>>19],n[s++]=r[c>>14&31],n[s++]=r[c>>9&31],n[s++]=r[c>>4&31],c=c<<16|n[t-1]<<8|n[t],n[s++]=r[c>>15&31],n[s++]=r[c>>10&31],n[s++]=r[c>>5&31],n[s++]=r[c&31]}switch(t){case n.length+3:{let c=n[t-4]<<16;n[s++]=r[c>>19],n[s++]=r[c>>14&31],n[s++]=x,n[s++]=x,n[s++]=x,n[s++]=x,n[s++]=x,n[s++]=x;break}case n.length+2:{let c=n[t-4]<<16|n[t-3]<<8;n[s++]=r[c>>19],n[s++]=r[c>>14&31],n[s++]=r[c>>9&31],n[s++]=r[c>>4&31],n[s++]=x,n[s++]=x,n[s++]=x,n[s++]=x;break}case n.length+1:{let c=n[t-4]<<16|n[t-3]<<8|n[t-2];n[s++]=r[c>>19],n[s++]=r[c>>14&31],n[s++]=r[c>>9&31],n[s++]=r[c>>4&31],c<<=16,n[s++]=r[c>>15&31],n[s++]=x,n[s++]=x,n[s++]=x;break}case n.length:{let c=n[t-4]<<16|n[t-3]<<8|n[t-2];n[s++]=r[c>>19],n[s++]=r[c>>14&31],n[s++]=r[c>>9&31],n[s++]=r[c>>4&31],c=c<<16|n[t-1]<<8,n[s++]=r[c>>15&31],n[s++]=r[c>>10&31],n[s++]=r[c>>5&31],n[s++]=x;break}}return s}function w(n,t,s,r,x){for(let c=n.length-6;c<n.length;++c)if(n[c]===x){for(let o=c+1;o<n.length;++o)if(n[o]!==x)throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(n[o])})`);n=n.subarray(0,c);break}switch((n.length-s)%8){case 6:case 3:case 1:throw new RangeError(`Cannot decode input as base32: Length (${n.length-s}), excluding padding, must not have a remainder of 1, 3, or 6 when divided by 8`)}for(t+=7;t<n.length;t+=8){let c=e(n[t-7],r)<<19|e(n[t-6],r)<<14|e(n[t-5],r)<<9|e(n[t-4],r)<<4;n[s++]=c>>16,n[s++]=c>>8&255,c=c<<16|e(n[t-3],r)<<15|e(n[t-2],r)<<10|e(n[t-1],r)<<5|e(n[t],r),n[s++]=c>>16&255,n[s++]=c>>8&255,n[s++]=c&255}switch(t){case n.length+5:{let c=e(n[t-7],r)<<19|e(n[t-6],r)<<14;n[s++]=c>>16;break}case n.length+3:{let c=e(n[t-7],r)<<19|e(n[t-6],r)<<14|e(n[t-5],r)<<9|e(n[t-4],r)<<4;n[s++]=c>>16,n[s++]=c>>8&255;break}case n.length+2:{let c=e(n[t-7],r)<<19|e(n[t-6],r)<<14|e(n[t-5],r)<<9|e(n[t-4],r)<<4;n[s++]=c>>16,n[s++]=c>>8&255,c=c<<16|e(n[t-3],r)<<15,n[s++]=c>>16&255;break}case n.length:{let c=e(n[t-7],r)<<19|e(n[t-6],r)<<14|e(n[t-5],r)<<9|e(n[t-4],r)<<4;n[s++]=c>>16,n[s++]=c>>8&255,c=c<<16|e(n[t-3],r)<<15|e(n[t-2],r)<<10|e(n[t-1],r)<<5,n[s++]=c>>16&255,n[s++]=c>>8&255;break}}return s}function e(n,t){let s=t[n]??32;if(s===32)throw new TypeError(`Cannot decode input as base32: Invalid character (${String.fromCharCode(n)})`);return s}function i(n,t){let s=n.length;if(n.byteOffset){let r=new Uint8Array(n.buffer);r.set(n),n=r.subarray(0,s)}return n=new Uint8Array(n.buffer.transfer(t)),n.set(n.subarray(0,s),t-s),[n,t-s]}var g=61,d=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),E=new Uint8Array(128).fill(32);d.forEach((n,t)=>E[n]=t);function l(n){typeof n=="string"?n=new TextEncoder().encode(n):n instanceof ArrayBuffer?n=new Uint8Array(n).slice():n=n.slice();let[t,s]=i(n,U(n.length));return m(t,s,0,d,g),new TextDecoder().decode(t)}function R(n){let t=new TextEncoder().encode(n);if(t.length%8)throw new TypeError(`Invalid base32 string: length (${t.length}) must be a multiple of 8`);return new Uint8Array(t.buffer.transfer(w(t,0,0,E,g)))}0&&(module.exports={decodeBase32,encodeBase32});