Estoy tratando de escribir mi propia solución para un problema de BFE https://bigfrontend.dev/problem/implement-atob
Básicamente, escribir un polyfill para la función atob disponible en javascript
Traté de comprender el proceso de codificación/descodificación base64 y se me ocurrió la siguiente implementación que funciona bien para la mayoría de las entradas, pero algunos de los casos de prueba están fallando
function myAtob(encoded) { // All base64 charset const base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; let temp = ""; // used for storing all characters to binary form let decoded = ""; for (let i of encoded) { // converts each encoded character to binary and pads if required temp += base64.indexOf(i).toString(2).padStart(6, 0); } for (let i = 0; i < temp.length; i += 8) { const num = temp.slice(i, i + 8); // make groups of 8 bits const ascii = parseInt(num, 2); // convert 8 bits to number if (ascii > 30 && ascii < 123){ // I used above 'if' for ignoring the unsupported characters decoded += String.fromCharCode(ascii); // append string equivalent } } return decoded; }Traté de depurar y creo que está sucediendo porque algunos códigos no admitidos o caracteres escapados están obteniendo parte de mi salida y estropean los casos de prueba.
Ejemplo al usar la función window.atob,
atob("A===") throws error atob("AA==") returns '\x00'Estos son diferentes de lo que devuelve mi función. Tal vez el carácter de relleno = esté estropeando algo.
Los siguientes son resultados de casos de prueba:

¿Puede alguien ayudarme a arreglar la lógica y el manejo de casos extremos?