| 215 | * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation |
| 216 | */ |
| 217 | export function b64encode(buffer: ArrayBufferLike): string { |
| 218 | const uint8 = new Uint8Array(buffer); |
| 219 | let result = "", |
| 220 | i; |
| 221 | const l = uint8.length; |
| 222 | for (i = 2; i < l; i += 3) { |
| 223 | result += base64abc[uint8[i - 2] >> 2]; |
| 224 | result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]; |
| 225 | result += base64abc[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)]; |
| 226 | result += base64abc[uint8[i] & 0x3f]; |
| 227 | } |
| 228 | if (i === l + 1) { |
| 229 | // 1 octet yet to write |
| 230 | result += base64abc[uint8[i - 2] >> 2]; |
| 231 | result += base64abc[(uint8[i - 2] & 0x03) << 4]; |
| 232 | result += "=="; |
| 233 | } |
| 234 | if (i === l) { |
| 235 | // 2 octets yet to write |
| 236 | result += base64abc[uint8[i - 2] >> 2]; |
| 237 | result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]; |
| 238 | result += base64abc[(uint8[i - 1] & 0x0f) << 2]; |
| 239 | result += "="; |
| 240 | } |
| 241 | return result; |
| 242 | } |