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) 3.42 kB
var u=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var r in e)u(t,r,{get:e[r],enumerable:!0})},B=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of E(e))!F.call(t,s)&&s!==r&&u(t,s,{get:()=>e[s],enumerable:!(a=w(e,s))||a.enumerable});return t};var C=t=>B(u({},"__esModule",{value:!0}),t);var v={};b(v,{Base64DecoderStream:()=>T,Base64EncoderStream:()=>_});module.exports=C(v);var l={base64:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),base64url:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")},A={base64:new Uint8Array(128).fill(64),base64url:new Uint8Array(128).fill(64)};l.base64.forEach((t,e)=>A.base64[t]=e);l.base64url.forEach((t,e)=>A.base64url[t]=e);function m(t){return((t+2)/3|0)*4}function U(t,e,r,a,s){for(e+=2;e<t.length;e+=3){let n=t[e-2]<<16|t[e-1]<<8|t[e];t[r++]=a[n>>18],t[r++]=a[n>>12&63],t[r++]=a[n>>6&63],t[r++]=a[n&63]}switch(e){case t.length+1:{let n=t[e-2]<<16;t[r++]=a[n>>18],t[r++]=a[n>>12&63],t[r++]=s,t[r++]=s;break}case t.length:{let n=t[e-2]<<16|t[e-1]<<8;t[r++]=a[n>>18],t[r++]=a[n>>12&63],t[r++]=a[n>>6&63],t[r++]=s;break}}return r}function g(t,e,r,a,s){for(let n=t.length-2;n<t.length;++n)if(t[n]===s){for(let o=n+1;o<t.length;++o)if(t[o]!==s)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(t[o])})`);t=t.subarray(0,n);break}if((t.length-r)%4===1)throw new RangeError(`Cannot decode input as base64: Length (${t.length-r}), excluding padding, must not have a remainder of 1 when divided by 4`);for(e+=3;e<t.length;e+=4){let n=d(t[e-3],a)<<18|d(t[e-2],a)<<12|d(t[e-1],a)<<6|d(t[e],a);t[r++]=n>>16,t[r++]=n>>8&255,t[r++]=n&255}switch(e){case t.length+1:{let n=d(t[e-3],a)<<18|d(t[e-2],a)<<12;t[r++]=n>>16;break}case t.length:{let n=d(t[e-3],a)<<18|d(t[e-2],a)<<12|d(t[e-1],a)<<6;t[r++]=n>>16,t[r++]=n>>8&255;break}}return r}function d(t,e){let r=e[t]??64;if(r===64)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(t)})`);return r}function h(t,e){let r=t.length;if(t.byteOffset){let a=new Uint8Array(t.buffer);a.set(t),t=a.subarray(0,r)}return t=new Uint8Array(t.buffer.transfer(e)),t.set(t.subarray(0,r),e-r),[t,e-r]}var k=new TextEncoder,q=new TextDecoder,_=class extends TransformStream{constructor(e={}){let r=l[e.alphabet??"base64"],a=function(){return e.output==="bytes"?o=>o:o=>q.decode(o)}(),s=new Uint8Array(2),n=0;super({transform(o,i){let[c,y]=h(o,m(n+o.length));n&&(y-=n,c.set(s.subarray(0,n),y)),n=(c.length-y)%3,n&&s.set(c.subarray(-n));let x=U(c.subarray(0,-n||void 0),y,0,r,61);i.enqueue(a(c.subarray(0,x)))},flush(o){if(n){let[i,c]=h(s.subarray(0,n),m(n)),y=U(i,c,0,r,61);if(e.alphabet==="base64url"){let x=i.indexOf(61,y-2);x>0&&(y=x)}o.enqueue(a(i.subarray(0,y)))}}})}},T=class extends TransformStream{constructor(e={}){let r=A[e.alphabet??"base64"],a=function(){return e.input==="bytes"?o=>o:o=>k.encode(o)}(),s=new Uint8Array(3),n=0;super({transform(o,i){let c=a(o);n&&(c=h(c,n+c.length)[0],c.set(s.subarray(0,n))),n=c.length%4,n&&s.set(c.subarray(-n));let y=g(c.subarray(0,-n||void 0),0,0,r,61);i.enqueue(c.subarray(0,y))},flush(o){if(n){let i=g(s.subarray(0,n),0,0,r,61);o.enqueue(s.subarray(0,i))}}})}};0&&(module.exports={Base64DecoderStream,Base64EncoderStream});