UNPKG

foxts

Version:

Opinionated collection of common TypeScript utils by @SukkaW

1 lines 1.64 kB
"use strict";var e=require("../guard/index.js");const t=Uint8Array,r=ArrayBuffer,n=TextDecoder,o=new TextEncoder,c=/=+$/,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=new Uint8Array(256);for(let e=0;e<a.length;e++)l[a.charCodeAt(e)]=e;const u={utf8:new n("utf8")};exports.base64ToUint8Array=function(e){const t=function(e){const t=e.replaceAll("-","+").replaceAll("_","/"),r=(4-t.length%4)%4;return t+"=".repeat(r)}(e),r=t.length;let n=.75*t.length,o,c=0,a,u,i,f;"="===t[t.length-1]&&(n--,"="===t[t.length-2]&&n--);const s=new Uint8Array(new ArrayBuffer(n));for(o=0;o<r;o+=4)a=l[t.charCodeAt(o)],u=l[t.charCodeAt(o+1)],i=l[t.charCodeAt(o+2)],f=l[t.charCodeAt(o+3)],s[c++]=a<<2|u>>4,s[c++]=(15&u)<<4|i>>2,s[c++]=(3&i)<<6|63&f;return s},exports.concatUint8Arrays=function(e,r){if(0===e.length)return new t(0);const n=new t(r??=e.reduce((e,t)=>e+t.length,0));let o=0;for(let t=0,r=e.length;t<r;t++){const r=e[t];n.set(r,o),o+=r.length}return n},exports.stringToUint8Array=function(e){return o.encode(e)},exports.toUint8Array=function(n){return n instanceof r?new t(n):r.isView(n)?new t(n.buffer,n.byteOffset,n.byteLength):void e.never(n,"value must be ArrayBuffer or ArrayBufferView")},exports.uint8ArrayToBase64=function(e,t=!1){let r="";const n=e.length;for(let t=0;t<n;t+=3)r+=a[e[t]>>2],r+=a[(3&e[t])<<4|e[t+1]>>4],r+=a[(15&e[t+1])<<2|e[t+2]>>6],r+=a[63&e[t+2]];return n%3==2?r=r.slice(0,Math.max(0,r.length-1))+"=":n%3==1&&(r=r.slice(0,Math.max(0,r.length-2))+"=="),t?r.replaceAll("+","-").replaceAll("/","_").replace(c,""):r},exports.uint8ArrayToString=function(e,t="utf8"){return u[t]??=new n(t),u[t].decode(e)};