'use strict'; module.exports = function base64_decode(encodedData) { // eslint-disable-line camelcase // discuss at: http://locutus.io/php/base64_decode/ // original by: Tyler Akins (http://rumkin.com) // improved by: Thunder.m // improved by: Kevin van Zonneveld (http://kvz.io) // improved by: Kevin van Zonneveld (http://kvz.io) // input by: Aman Gupta // input by: Brett Zamir (http://brett-zamir.me) // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman) // bugfixed by: Pellentesque Malesuada // bugfixed by: Kevin van Zonneveld (http://kvz.io) // improved by: Indigo744 // example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==') // returns 1: 'Kevin van Zonneveld' // example 2: base64_decode('YQ==') // returns 2: 'a' // example 3: base64_decode('4pyTIMOgIGxhIG1vZGU=') // returns 3: '✓ à la mode' // decodeUTF8string() // Internal function to decode properly UTF8 string // Adapted from Solution #1 at https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding var decodeUTF8string = function decodeUTF8string(str) { // Going backwards: from bytestream, to percent-encoding, to original string. return decodeURIComponent(str.split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); }; if (typeof window !== 'undefined') { if (typeof window.atob !== 'undefined') { return decodeUTF8string(window.atob(encodedData)); } } else { return new Buffer(encodedData, 'base64').toString('utf-8'); } var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var o1; var o2; var o3; var h1; var h2; var h3; var h4; var bits; var i = 0; var ac = 0; var dec = ''; var tmpArr = []; if (!encodedData) { return encodedData; } encodedData += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(encodedData.charAt(i++)); h2 = b64.indexOf(encodedData.charAt(i++)); h3 = b64.indexOf(encodedData.charAt(i++)); h4 = b64.indexOf(encodedData.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 === 64) { tmpArr[ac++] = String.fromCharCode(o1); } else if (h4 === 64) { tmpArr[ac++] = String.fromCharCode(o1, o2); } else { tmpArr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < encodedData.length); dec = tmpArr.join(''); return decodeUTF8string(dec.replace(/\0+$/, '')); }; //# sourceMappingURL=base64_decode.js.map