| /** | |
| * @param {string} text | |
| * @returns {ArrayBufferLike} | |
| */ | |
| export function b64_decode(text) { | |
| const d = atob(text); | |
| const u8 = new Uint8Array(d.length); | |
| for (let i = 0; i < d.length; i++) { | |
| u8[i] = d.charCodeAt(i); | |
| } | |
| return u8.buffer; | |
| } | |
| /** | |
| * @param {ArrayBuffer} buffer | |
| * @returns {string} | |
| */ | |
| export function b64_encode(buffer) { | |
| if (globalThis.Buffer) { | |
| return Buffer.from(buffer).toString('base64'); | |
| } | |
| const little_endian = new Uint8Array(new Uint16Array([1]).buffer)[0] > 0; | |
| // The Uint16Array(Uint8Array(...)) ensures the code points are padded with 0's | |
| return btoa( | |
| new TextDecoder(little_endian ? 'utf-16le' : 'utf-16be').decode( | |
| new Uint16Array(new Uint8Array(buffer)) | |
| ) | |
| ); | |
| } | |