'use strict'; module.exports = function base64_encode(stringToEncode) { // eslint-disable-line camelcase // discuss at: http://locutus.io/php/base64_encode/ // original by: Tyler Akins (http://rumkin.com) // improved by: Bayron Guevara // improved by: Thunder.m // improved by: Kevin van Zonneveld (http://kvz.io) // improved by: Kevin van Zonneveld (http://kvz.io) // improved by: Rafał Kukawski (http://blog.kukawski.pl) // bugfixed by: Pellentesque Malesuada // improved by: Indigo744 // example 1: base64_encode('Kevin van Zonneveld') // returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' // example 2: base64_encode('a') // returns 2: 'YQ==' // example 3: base64_encode('✓ à la mode') // returns 3: '4pyTIMOgIGxhIG1vZGU=' // encodeUTF8string() // Internal function to encode properly UTF8 string // Adapted from Solution #1 at https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding var encodeUTF8string = function encodeUTF8string(str) { // first we use encodeURIComponent to get percent-encoded UTF-8, // then we convert the percent encodings into raw bytes which // can be fed into the base64 encoding algorithm. return encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) { return String.fromCharCode('0x' + p1); }); }; if (typeof window !== 'undefined') { if (typeof window.btoa !== 'undefined') { return window.btoa(encodeUTF8string(stringToEncode)); } } else { return new Buffer(stringToEncode).toString('base64'); } 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 enc = ''; var tmpArr = []; if (!stringToEncode) { return stringToEncode; } stringToEncode = encodeUTF8string(stringToEncode); do { // pack three octets into four hexets o1 = stringToEncode.charCodeAt(i++); o2 = stringToEncode.charCodeAt(i++); o3 = stringToEncode.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; // use hexets to index into b64, and append result to encoded string tmpArr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < stringToEncode.length); enc = tmpArr.join(''); var r = stringToEncode.length % 3; return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); }; //# sourceMappingURL=base64_encode.js.map