react-native-firebase/src/utils/Base64.js

69 lines
1.5 KiB
JavaScript

// @flow
/* eslint-disable */
const CHARS =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
export default {
/**
* window.btoa
*/
btoa(input: string = ''): string {
let map;
let i = 0;
let block = 0;
let output = '';
// eslint-disable-next-line
for (
block = 0, i = 0, map = CHARS;
input.charAt(i | 0) || ((map = '='), i % 1);
output += map.charAt(63 & (block >> (8 - (i % 1) * 8)))
) {
const charCode = input.charCodeAt((i += 3 / 4));
if (charCode > 0xff) {
throw new Error(
"'RNFirebase.utils.btoa' failed: The string to be encoded contains characters outside of the Latin1 range."
);
}
block = (block << 8) | charCode;
}
return output;
},
/**
* window.atob
*/
atob(input: string = ''): string {
let i = 0;
let bc = 0;
let bs = 0;
let buffer;
let output = '';
const str = input.replace(/=+$/, '');
if (str.length % 4 === 1) {
throw new Error(
"'RNFirebase.utils.atob' failed: The string to be decoded is not correctly encoded."
);
}
// eslint-disable-next-line
for (
bc = 0, bs = 0, 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;
},
};