summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/url/base64_encode.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/url/base64_encode.js')
-rw-r--r--node_modules/locutus/php/url/base64_encode.js84
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