Skip to content

Instantly share code, notes, and snippets.

@surendharreddy
Created March 24, 2020 04:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save surendharreddy/9640e1043ecdb6e8c211d78df053340c to your computer and use it in GitHub Desktop.
Save surendharreddy/9640e1043ecdb6e8c211d78df053340c to your computer and use it in GitHub Desktop.
/**
* Base64 encode/decode
* Inspired by: https://github.com/davidchambers/Base64.js/blob/master/base64.js
*/
const chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
export const Base64 = {
btoa: (input) => {
let str = input
let output = ''
for (
let block = 0, charCode, i = 0, map = chars;
str.charAt(i | 0) || ((map = '='), i % 1);
output += map.charAt(63 & (block >> (8 - (i % 1) * 8)))
) {
charCode = str.charCodeAt((i += 3 / 4))
if (charCode > 0xff) {
throw new Error(
"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.",
)
}
block = (block << 8) | charCode
}
return output
},
atob: (input) => {
let str = input.replace(/=+$/, '')
let output = ''
if (str.length % 4 == 1) {
throw new Error(
"'atob' failed: The string to be decoded is not correctly encoded.",
)
}
for (
let bc = 0, bs = 0, buffer, i = 0;
(buffer = str.charAt(i++));
~buffer && ((bs = bc % 4 ? bs * 64 + buffer : buffer), bc++ % 4)
? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))
: 0
) {
buffer = chars.indexOf(buffer)
}
return output
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment