1 const charsMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
2
3 function binaryToBase64(chars) {
4 const padLength = (3 - chars.length % 3) % 3;
5 return (chars.split('').map(char => {
6 return char.charCodeAt(0).toString(2).padStart(8, '0');
7 }).join('') + '0'.repeat(2 * padLength)).split(/\B(?=(?:\d{6})+$)/g).map(char => {
8 return charsMap[+('0b' + char)];
9 }).join('') + '='.repeat(padLength);
10 }
11
12 function base64ToBinary(base64) {
13 const tail = base64.match(/=+/);
14 const padLength = tail ? tail[0].length : 0;
15 return base64.slice(0, base64.length - padLength).split('').map(char => {
16 return charsMap.indexOf(char).toString(2).padStart(6, '0');
17 }).join('').slice(0, base64.length * 6 - padLength * 8).split(/\B(?=(?:\d{8})+$)/g).map(code => {
18 return String.fromCharCode(+('0b' + code));
19 }).join('');
20 }
21
22 export {
23 binaryToBase64,
24 base64ToBinary
25 }