UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

2 lines 1.82 kB
/*! Copyright 2024 the gnablib contributors MPL-1.1 */ import{ContentError as e}from"../error/ContentError.js";const t=63,r=63;export function fromBytes(e){let n=2,a=0;const c=new Uint8Array(Math.ceil(4*e.length/3));for(;n<e.length;n+=3)c[a++]=r+(e[n-2]>>2),c[a++]=r+((3&e[n-2])<<4|e[n-1]>>4),c[a++]=r+((e[n-1]<<2|e[n]>>6)&t),c[a++]=r+(e[n]&t);switch(n-=2,e.length-n){case 0:break;case 1:c[a++]=r+(e[n]>>2),c[a++]=r+((3&e[n])<<4);break;case 2:c[a++]=r+(e[n]>>2),c[a++]=r+((3&e[n])<<4|e[n+1]>>4),c[a++]=r+(e[n+1]<<2&t)}return(new TextDecoder).decode(c.subarray(0,a))}export function toBytes(t){const n=new Uint8Array(t.length);function a(n,a){if(n[a]-=r,192&n[a])throw new e("char","source",t.charAt(a));return n[a]}(new TextEncoder).encodeInto(t,n);let c=3,o=0;const s=new Uint8Array(Math.ceil(3*n.length/4));for(;c<n.length;c+=4)a(n,c-3),a(n,c-2),a(n,c-1),a(n,c),s[o++]=n[c-3]<<2|n[c-2]>>4,s[o++]=n[c-2]<<4|n[c-1]>>2,s[o++]=n[c-1]<<6|n[c];switch(c-=3,n.length-c){case 0:break;case 1:throw new e("one extra character found",t.charAt(c+1));case 2:a(n,c),a(n,c+1),s[o++]=n[c]<<2|n[c+1]>>4;break;case 3:a(n,c),a(n,c+1),a(n,c+2),s[o++]=n[c]<<2|n[c+1]>>4,s[o++]=n[c+1]<<4|n[c+2]>>2}return s.subarray(0,o)}export function toBytesFast(n){const a=new Uint8Array(n.length);(new TextEncoder).encodeInto(n,a);let c=3,o=0;const s=new Uint8Array(Math.ceil(3*a.length/4));for(;c<a.length;c+=4)a[c-3]=a[c-3]-r&t,a[c-2]=a[c-2]-r&t,a[c-1]=a[c-1]-r&t,a[c]=a[c]-r&t,s[o++]=a[c-3]<<2|a[c-2]>>4,s[o++]=a[c-2]<<4|a[c-1]>>2,s[o++]=a[c-1]<<6|a[c];switch(c-=3,a.length-c){case 0:break;case 1:throw new e("one extra character found",n.charAt(c+1));case 2:a[c]=a[c]-r&t,a[c+1]=a[c+1]-r&t,s[o++]=a[c]<<2|a[c+1]>>4;break;case 3:a[c]=a[c]-r&t,a[c+1]=a[c+1]-r&t,a[c+2]=a[c+2]-r&t,s[o++]=a[c]<<2|a[c+1]>>4,s[o++]=a[c+1]<<4|a[c+2]>>2}return s.subarray(0,o)}