let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ; function encode ( input ) { let output = "" , i = 0 , chr1 , chr2 , chr3 , enc1 , enc2 , enc3 , enc4 ; input = encodeTransform ( input ) ; while ( i < input . length ) { chr1 = input . charCodeAt ( i ++ ) ; chr2 = input . charCodeAt ( i ++ ) ; chr3 = input . charCodeAt ( i ++ ) ; enc1 = chr1 >> 2 ; enc2 = ( ( chr1 & 3 ) << 4 ) | ( chr2 >> 4 ) ; enc3 = ( ( chr2 & 15 ) << 2 ) | ( chr3 >> 6 ) ; enc4 = chr3 & 63 ; if ( Number . isNaN ( chr2 ) ) { enc3 = enc4 = 64 ; } else if ( Number . isNaN ( chr3 ) ) { enc4 = 64 ; } output = output + _keyStr . charAt ( enc1 ) + _keyStr . charAt ( enc2 ) + _keyStr . charAt ( enc3 ) + _keyStr . charAt ( enc4 ) ; } return output ; } function decode ( input ) { let output = "" , i = 0 , chr1 , chr2 , chr3 , enc1 , enc2 , enc3 , enc4 ; while ( i < input . length ) { enc1 = _keyStr . indexOf ( input . charAt ( i ++ ) ) ; enc2 = _keyStr . indexOf ( input . charAt ( i ++ ) ) ; enc3 = _keyStr . indexOf ( input . charAt ( i ++ ) ) ; enc4 = _keyStr . indexOf ( input . charAt ( i ++ ) ) ; chr1 = ( enc1 << 2 ) | ( enc2 >> 4 ) ; chr2 = ( ( enc2 & 15 ) << 4 ) | ( enc3 >> 2 ) ; chr3 = ( ( enc3 & 3 ) << 6 ) | enc4 ; output = output + String . fromCharCode ( chr1 ) ; if ( enc3 != 64 ) { output = output + String . fromCharCode ( chr2 ) ; } if ( enc4 != 64 ) { output = output + String . fromCharCode ( chr3 ) ; } } output = decodeTransform ( output ) ; return output ; } function encodeTransform ( input ) { let output = "" ; for ( var n = 0 ; n < input . length ; n ++ ) { var c = input . charCodeAt ( n ) ; if ( c < 128 ) { output += String . fromCharCode ( c ) ; } else if ( c > 127 && c < 2048 ) { output += String . fromCharCode ( ( c >> 6 ) | 192 ) ; output += String . fromCharCode ( ( c & 63 ) | 128 ) ; } else { output += String . fromCharCode ( ( c >> 12 ) | 224 ) ; output += String . fromCharCode ( ( ( c >> 6 ) & 63 ) | 128 ) ; output += String . fromCharCode ( ( c & 63 ) | 128 ) ; } } return output ; } function decodeTransform ( input ) { let output = "" , i = 0 , c = 0 , c1 = 0 , c2 = 0 ; while ( i < input . length ) { c = input . charCodeAt ( i ) ; if ( c < 128 ) { output += String . fromCharCode ( c ) ; i ++ ; } else if ( c > 191 && c < 224 ) { c1 = input . charCodeAt ( i + 1 ) ; output += String . fromCharCode ( ( ( c & 31 ) << 6 ) | ( c1 & 63 ) ) ; i += 2 ; } else { c1 = input . charCodeAt ( i + 1 ) ; c2 = input . charCodeAt ( i + 2 ) ; output += String . fromCharCode ( ( ( c & 15 ) << 12 ) | ( ( c1 & 63 ) << 6 ) | ( c2 & 63 ) ) ; i += 3 ; } } return output ; } const Base64 = { decode , encode } ; export default Base64 ;