diff options
Diffstat (limited to 'node_modules/locutus/php/url/base64_encode.js')
-rw-r--r-- | node_modules/locutus/php/url/base64_encode.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/node_modules/locutus/php/url/base64_encode.js b/node_modules/locutus/php/url/base64_encode.js new file mode 100644 index 0000000..5512a3e --- /dev/null +++ b/node_modules/locutus/php/url/base64_encode.js @@ -0,0 +1,84 @@ +'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
\ No newline at end of file |