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) • 1.69 kB
JavaScript
import{a as s}from"./chunk-EW6NS4PK.js";var f="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~",b="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#";function p(r,l={}){let n=s(r),{standard:a="Adobe"}=l,t=[],c,o=0,i=0;if(n.length%4!==0){let e=n;i=4-e.length%4,n=new Uint8Array(e.length+i),n.set(e)}let d=new DataView(n.buffer,n.byteOffset,n.byteLength);for(let e=0;e<n.length;e+=4){if(c=d.getUint32(e),(a==="Adobe"||a==="btoa")&&c===0&&e<n.length-i-3){t[o++]="z";continue}if(a==="btoa"&&c===538976288){t[o++]="y";continue}for(let A=4;A>=0;A--)t[o+A]=String.fromCharCode(c%85+33),c=Math.trunc(c/85);o+=5}switch(a){case"Adobe":if(l!=null&&l.delimiter)return`<~${t.slice(0,t.length-i).join("")}~>`;break;case"btoa":if(l!=null&&l.delimiter)return`xbtoa Begin
${t.slice(0,t.length-i).join("")}
xbtoa End`;break;case"RFC 1924":t=t.map(e=>f[e.charCodeAt(0)-33]);break;case"Z85":t=t.map(e=>b[e.charCodeAt(0)-33]);break}return t.slice(0,t.length-i).join("")}function h(r,l={}){let{standard:n="Adobe"}=l;switch(n){case"Adobe":r=r.replaceAll(/(<~|~>)/g,"").replaceAll("z","!!!!!");break;case"btoa":r=r.replaceAll(/(xbtoa Begin|xbtoa End|\n)/g,"").replaceAll("z","!!!!!").replaceAll("y","+<VdL");break;case"RFC 1924":r=r.replaceAll(/./g,e=>String.fromCharCode(f.indexOf(e)+33));break;case"Z85":r=r.replaceAll(/./g,e=>String.fromCharCode(b.indexOf(e)+33));break}r=r.replaceAll(/[^!-u]/g,"");let a=r.length,t=new Uint8Array(a+4-a%4),c=new DataView(t.buffer),o=0,i=0,d=0;for(let e=0;e<a;){for(d+=5;e<d;e++)o=o*85+(e<a?r.charCodeAt(e):117)-33;c.setUint32(i,o),o=0,i+=4}return t.slice(0,Math.trunc(a*.8))}export{p as a,h as b};