|
@@ -0,0 +1,436 @@
|
|
|
+//
|
|
|
+// THIS FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT BY HAND!
|
|
|
+//
|
|
|
+(function (global, factory) {
|
|
|
+ typeof exports === "object" && typeof module !== "undefined"
|
|
|
+ ? (module.exports = factory())
|
|
|
+ : typeof define === "function" && define.amd
|
|
|
+ ? define(factory)
|
|
|
+ : // cf. https://github.com/dankogai/js-base64/issues/119
|
|
|
+ (function () {
|
|
|
+ // existing version for noConflict()
|
|
|
+ var _Base64 = global.Base64;
|
|
|
+ var gBase64 = factory();
|
|
|
+ gBase64.noConflict = function () {
|
|
|
+ global.Base64 = _Base64;
|
|
|
+ return gBase64;
|
|
|
+ };
|
|
|
+ if (global.Meteor) {
|
|
|
+ // Meteor.js
|
|
|
+ Base64 = gBase64;
|
|
|
+ }
|
|
|
+ global.Base64 = gBase64;
|
|
|
+ })();
|
|
|
+})(
|
|
|
+ typeof self !== "undefined"
|
|
|
+ ? self
|
|
|
+ : typeof window !== "undefined"
|
|
|
+ ? window
|
|
|
+ : typeof global !== "undefined"
|
|
|
+ ? global
|
|
|
+ : this,
|
|
|
+ function () {
|
|
|
+ "use strict";
|
|
|
+ /**
|
|
|
+ * base64.ts
|
|
|
+ *
|
|
|
+ * Licensed under the BSD 3-Clause License.
|
|
|
+ * http://opensource.org/licenses/BSD-3-Clause
|
|
|
+ *
|
|
|
+ * References:
|
|
|
+ * http://en.wikipedia.org/wiki/Base64
|
|
|
+ *
|
|
|
+ * @author Dan Kogai (https://github.com/dankogai)
|
|
|
+ */
|
|
|
+ var version = "3.7.5";
|
|
|
+ /**
|
|
|
+ * @deprecated use lowercase `version`.
|
|
|
+ */
|
|
|
+ var VERSION = version;
|
|
|
+ var _hasatob = typeof atob === "function";
|
|
|
+ var _hasbtoa = typeof btoa === "function";
|
|
|
+ var _hasBuffer = typeof Buffer === "function";
|
|
|
+ var _TD = typeof TextDecoder === "function" ? new TextDecoder() : undefined;
|
|
|
+ var _TE = typeof TextEncoder === "function" ? new TextEncoder() : undefined;
|
|
|
+ var b64ch =
|
|
|
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
|
+ var b64chs = Array.prototype.slice.call(b64ch);
|
|
|
+ var b64tab = (function (a) {
|
|
|
+ var tab = {};
|
|
|
+ a.forEach(function (c, i) {
|
|
|
+ return (tab[c] = i);
|
|
|
+ });
|
|
|
+ return tab;
|
|
|
+ })(b64chs);
|
|
|
+ var b64re =
|
|
|
+ /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
|
|
|
+ var _fromCC = String.fromCharCode.bind(String);
|
|
|
+ var _U8Afrom =
|
|
|
+ typeof Uint8Array.from === "function"
|
|
|
+ ? Uint8Array.from.bind(Uint8Array)
|
|
|
+ : function (it) {
|
|
|
+ return new Uint8Array(Array.prototype.slice.call(it, 0));
|
|
|
+ };
|
|
|
+ var _mkUriSafe = function (src) {
|
|
|
+ return src.replace(/=/g, "").replace(/[+\/]/g, function (m0) {
|
|
|
+ return m0 == "+" ? "-" : "_";
|
|
|
+ });
|
|
|
+ };
|
|
|
+ var _tidyB64 = function (s) {
|
|
|
+ return s.replace(/[^A-Za-z0-9\+\/]/g, "");
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * polyfill version of `btoa`
|
|
|
+ */
|
|
|
+ var btoaPolyfill = function (bin) {
|
|
|
+ // console.log('polyfilled');
|
|
|
+ var u32,
|
|
|
+ c0,
|
|
|
+ c1,
|
|
|
+ c2,
|
|
|
+ asc = "";
|
|
|
+ var pad = bin.length % 3;
|
|
|
+ for (var i = 0; i < bin.length; ) {
|
|
|
+ if (
|
|
|
+ (c0 = bin.charCodeAt(i++)) > 255 ||
|
|
|
+ (c1 = bin.charCodeAt(i++)) > 255 ||
|
|
|
+ (c2 = bin.charCodeAt(i++)) > 255
|
|
|
+ )
|
|
|
+ throw new TypeError("invalid character found");
|
|
|
+ u32 = (c0 << 16) | (c1 << 8) | c2;
|
|
|
+ asc +=
|
|
|
+ b64chs[(u32 >> 18) & 63] +
|
|
|
+ b64chs[(u32 >> 12) & 63] +
|
|
|
+ b64chs[(u32 >> 6) & 63] +
|
|
|
+ b64chs[u32 & 63];
|
|
|
+ }
|
|
|
+ return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * does what `window.btoa` of web browsers do.
|
|
|
+ * @param {String} bin binary string
|
|
|
+ * @returns {string} Base64-encoded string
|
|
|
+ */
|
|
|
+ var _btoa = _hasbtoa
|
|
|
+ ? function (bin) {
|
|
|
+ return btoa(bin);
|
|
|
+ }
|
|
|
+ : _hasBuffer
|
|
|
+ ? function (bin) {
|
|
|
+ return Buffer.from(bin, "binary").toString("base64");
|
|
|
+ }
|
|
|
+ : btoaPolyfill;
|
|
|
+ var _fromUint8Array = _hasBuffer
|
|
|
+ ? function (u8a) {
|
|
|
+ return Buffer.from(u8a).toString("base64");
|
|
|
+ }
|
|
|
+ : function (u8a) {
|
|
|
+ // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326
|
|
|
+ var maxargs = 0x1000;
|
|
|
+ var strs = [];
|
|
|
+ for (var i = 0, l = u8a.length; i < l; i += maxargs) {
|
|
|
+ strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));
|
|
|
+ }
|
|
|
+ return _btoa(strs.join(""));
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * converts a Uint8Array to a Base64 string.
|
|
|
+ * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5
|
|
|
+ * @returns {string} Base64 string
|
|
|
+ */
|
|
|
+ var fromUint8Array = function (u8a, urlsafe) {
|
|
|
+ if (urlsafe === void 0) {
|
|
|
+ urlsafe = false;
|
|
|
+ }
|
|
|
+ return urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);
|
|
|
+ };
|
|
|
+ // This trick is found broken https://github.com/dankogai/js-base64/issues/130
|
|
|
+ // const utob = (src: string) => unescape(encodeURIComponent(src));
|
|
|
+ // reverting good old fationed regexp
|
|
|
+ var cb_utob = function (c) {
|
|
|
+ if (c.length < 2) {
|
|
|
+ var cc = c.charCodeAt(0);
|
|
|
+ return cc < 0x80
|
|
|
+ ? c
|
|
|
+ : cc < 0x800
|
|
|
+ ? _fromCC(0xc0 | (cc >>> 6)) + _fromCC(0x80 | (cc & 0x3f))
|
|
|
+ : _fromCC(0xe0 | ((cc >>> 12) & 0x0f)) +
|
|
|
+ _fromCC(0x80 | ((cc >>> 6) & 0x3f)) +
|
|
|
+ _fromCC(0x80 | (cc & 0x3f));
|
|
|
+ } else {
|
|
|
+ var cc =
|
|
|
+ 0x10000 +
|
|
|
+ (c.charCodeAt(0) - 0xd800) * 0x400 +
|
|
|
+ (c.charCodeAt(1) - 0xdc00);
|
|
|
+ return (
|
|
|
+ _fromCC(0xf0 | ((cc >>> 18) & 0x07)) +
|
|
|
+ _fromCC(0x80 | ((cc >>> 12) & 0x3f)) +
|
|
|
+ _fromCC(0x80 | ((cc >>> 6) & 0x3f)) +
|
|
|
+ _fromCC(0x80 | (cc & 0x3f))
|
|
|
+ );
|
|
|
+ }
|
|
|
+ };
|
|
|
+ var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
|
|
|
+ /**
|
|
|
+ * @deprecated should have been internal use only.
|
|
|
+ * @param {string} src UTF-8 string
|
|
|
+ * @returns {string} UTF-16 string
|
|
|
+ */
|
|
|
+ var utob = function (u) {
|
|
|
+ return u.replace(re_utob, cb_utob);
|
|
|
+ };
|
|
|
+ //
|
|
|
+ var _encode = _hasBuffer
|
|
|
+ ? function (s) {
|
|
|
+ return Buffer.from(s, "utf8").toString("base64");
|
|
|
+ }
|
|
|
+ : _TE
|
|
|
+ ? function (s) {
|
|
|
+ return _fromUint8Array(_TE.encode(s));
|
|
|
+ }
|
|
|
+ : function (s) {
|
|
|
+ return _btoa(utob(s));
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * converts a UTF-8-encoded string to a Base64 string.
|
|
|
+ * @param {boolean} [urlsafe] if `true` make the result URL-safe
|
|
|
+ * @returns {string} Base64 string
|
|
|
+ */
|
|
|
+ var encode = function (src, urlsafe) {
|
|
|
+ if (urlsafe === void 0) {
|
|
|
+ urlsafe = false;
|
|
|
+ }
|
|
|
+ return urlsafe ? _mkUriSafe(_encode(src)) : _encode(src);
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.
|
|
|
+ * @returns {string} Base64 string
|
|
|
+ */
|
|
|
+ var encodeURI = function (src) {
|
|
|
+ return encode(src, true);
|
|
|
+ };
|
|
|
+ // This trick is found broken https://github.com/dankogai/js-base64/issues/130
|
|
|
+ // const btou = (src: string) => decodeURIComponent(escape(src));
|
|
|
+ // reverting good old fationed regexp
|
|
|
+ var re_btou =
|
|
|
+ /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g;
|
|
|
+ var cb_btou = function (cccc) {
|
|
|
+ switch (cccc.length) {
|
|
|
+ case 4:
|
|
|
+ var cp =
|
|
|
+ ((0x07 & cccc.charCodeAt(0)) << 18) |
|
|
|
+ ((0x3f & cccc.charCodeAt(1)) << 12) |
|
|
|
+ ((0x3f & cccc.charCodeAt(2)) << 6) |
|
|
|
+ (0x3f & cccc.charCodeAt(3)),
|
|
|
+ offset = cp - 0x10000;
|
|
|
+ return (
|
|
|
+ _fromCC((offset >>> 10) + 0xd800) +
|
|
|
+ _fromCC((offset & 0x3ff) + 0xdc00)
|
|
|
+ );
|
|
|
+ case 3:
|
|
|
+ return _fromCC(
|
|
|
+ ((0x0f & cccc.charCodeAt(0)) << 12) |
|
|
|
+ ((0x3f & cccc.charCodeAt(1)) << 6) |
|
|
|
+ (0x3f & cccc.charCodeAt(2))
|
|
|
+ );
|
|
|
+ default:
|
|
|
+ return _fromCC(
|
|
|
+ ((0x1f & cccc.charCodeAt(0)) << 6) | (0x3f & cccc.charCodeAt(1))
|
|
|
+ );
|
|
|
+ }
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * @deprecated should have been internal use only.
|
|
|
+ * @param {string} src UTF-16 string
|
|
|
+ * @returns {string} UTF-8 string
|
|
|
+ */
|
|
|
+ var btou = function (b) {
|
|
|
+ return b.replace(re_btou, cb_btou);
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * polyfill version of `atob`
|
|
|
+ */
|
|
|
+ var atobPolyfill = function (asc) {
|
|
|
+ // console.log('polyfilled');
|
|
|
+ asc = asc.replace(/\s+/g, "");
|
|
|
+ if (!b64re.test(asc)) throw new TypeError("malformed base64.");
|
|
|
+ asc += "==".slice(2 - (asc.length & 3));
|
|
|
+ var u24,
|
|
|
+ bin = "",
|
|
|
+ r1,
|
|
|
+ r2;
|
|
|
+ for (var i = 0; i < asc.length; ) {
|
|
|
+ u24 =
|
|
|
+ (b64tab[asc.charAt(i++)] << 18) |
|
|
|
+ (b64tab[asc.charAt(i++)] << 12) |
|
|
|
+ ((r1 = b64tab[asc.charAt(i++)]) << 6) |
|
|
|
+ (r2 = b64tab[asc.charAt(i++)]);
|
|
|
+ bin +=
|
|
|
+ r1 === 64
|
|
|
+ ? _fromCC((u24 >> 16) & 255)
|
|
|
+ : r2 === 64
|
|
|
+ ? _fromCC((u24 >> 16) & 255, (u24 >> 8) & 255)
|
|
|
+ : _fromCC((u24 >> 16) & 255, (u24 >> 8) & 255, u24 & 255);
|
|
|
+ }
|
|
|
+ return bin;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * does what `window.atob` of web browsers do.
|
|
|
+ * @param {String} asc Base64-encoded string
|
|
|
+ * @returns {string} binary string
|
|
|
+ */
|
|
|
+ var _atob = _hasatob
|
|
|
+ ? function (asc) {
|
|
|
+ return atob(_tidyB64(asc));
|
|
|
+ }
|
|
|
+ : _hasBuffer
|
|
|
+ ? function (asc) {
|
|
|
+ return Buffer.from(asc, "base64").toString("binary");
|
|
|
+ }
|
|
|
+ : atobPolyfill;
|
|
|
+ //
|
|
|
+ var _toUint8Array = _hasBuffer
|
|
|
+ ? function (a) {
|
|
|
+ return _U8Afrom(Buffer.from(a, "base64"));
|
|
|
+ }
|
|
|
+ : function (a) {
|
|
|
+ return _U8Afrom(
|
|
|
+ _atob(a)
|
|
|
+ .split("")
|
|
|
+ .map(function (c) {
|
|
|
+ return c.charCodeAt(0);
|
|
|
+ })
|
|
|
+ );
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * converts a Base64 string to a Uint8Array.
|
|
|
+ */
|
|
|
+ var toUint8Array = function (a) {
|
|
|
+ return _toUint8Array(_unURI(a));
|
|
|
+ };
|
|
|
+ //
|
|
|
+ var _decode = _hasBuffer
|
|
|
+ ? function (a) {
|
|
|
+ return Buffer.from(a, "base64").toString("utf8");
|
|
|
+ }
|
|
|
+ : _TD
|
|
|
+ ? function (a) {
|
|
|
+ return _TD.decode(_toUint8Array(a));
|
|
|
+ }
|
|
|
+ : function (a) {
|
|
|
+ return btou(_atob(a));
|
|
|
+ };
|
|
|
+ var _unURI = function (a) {
|
|
|
+ return _tidyB64(
|
|
|
+ a.replace(/[-_]/g, function (m0) {
|
|
|
+ return m0 == "-" ? "+" : "/";
|
|
|
+ })
|
|
|
+ );
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * converts a Base64 string to a UTF-8 string.
|
|
|
+ * @param {String} src Base64 string. Both normal and URL-safe are supported
|
|
|
+ * @returns {string} UTF-8 string
|
|
|
+ */
|
|
|
+ var decode = function (src) {
|
|
|
+ return _decode(_unURI(src));
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * check if a value is a valid Base64 string
|
|
|
+ * @param {String} src a value to check
|
|
|
+ */
|
|
|
+ var isValid = function (src) {
|
|
|
+ if (typeof src !== "string") return false;
|
|
|
+ var s = src.replace(/\s+/g, "").replace(/={0,2}$/, "");
|
|
|
+ return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s);
|
|
|
+ };
|
|
|
+ //
|
|
|
+ var _noEnum = function (v) {
|
|
|
+ return {
|
|
|
+ value: v,
|
|
|
+ enumerable: false,
|
|
|
+ writable: true,
|
|
|
+ configurable: true,
|
|
|
+ };
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * extend String.prototype with relevant methods
|
|
|
+ */
|
|
|
+ var extendString = function () {
|
|
|
+ var _add = function (name, body) {
|
|
|
+ return Object.defineProperty(String.prototype, name, _noEnum(body));
|
|
|
+ };
|
|
|
+ _add("fromBase64", function () {
|
|
|
+ return decode(this);
|
|
|
+ });
|
|
|
+ _add("toBase64", function (urlsafe) {
|
|
|
+ return encode(this, urlsafe);
|
|
|
+ });
|
|
|
+ _add("toBase64URI", function () {
|
|
|
+ return encode(this, true);
|
|
|
+ });
|
|
|
+ _add("toBase64URL", function () {
|
|
|
+ return encode(this, true);
|
|
|
+ });
|
|
|
+ _add("toUint8Array", function () {
|
|
|
+ return toUint8Array(this);
|
|
|
+ });
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * extend Uint8Array.prototype with relevant methods
|
|
|
+ */
|
|
|
+ var extendUint8Array = function () {
|
|
|
+ var _add = function (name, body) {
|
|
|
+ return Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));
|
|
|
+ };
|
|
|
+ _add("toBase64", function (urlsafe) {
|
|
|
+ return fromUint8Array(this, urlsafe);
|
|
|
+ });
|
|
|
+ _add("toBase64URI", function () {
|
|
|
+ return fromUint8Array(this, true);
|
|
|
+ });
|
|
|
+ _add("toBase64URL", function () {
|
|
|
+ return fromUint8Array(this, true);
|
|
|
+ });
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * extend Builtin prototypes with relevant methods
|
|
|
+ */
|
|
|
+ var extendBuiltins = function () {
|
|
|
+ extendString();
|
|
|
+ extendUint8Array();
|
|
|
+ };
|
|
|
+ var gBase64 = {
|
|
|
+ version: version,
|
|
|
+ VERSION: VERSION,
|
|
|
+ atob: _atob,
|
|
|
+ atobPolyfill: atobPolyfill,
|
|
|
+ btoa: _btoa,
|
|
|
+ btoaPolyfill: btoaPolyfill,
|
|
|
+ fromBase64: decode,
|
|
|
+ toBase64: encode,
|
|
|
+ encode: encode,
|
|
|
+ encodeURI: encodeURI,
|
|
|
+ encodeURL: encodeURI,
|
|
|
+ utob: utob,
|
|
|
+ btou: btou,
|
|
|
+ decode: decode,
|
|
|
+ isValid: isValid,
|
|
|
+ fromUint8Array: fromUint8Array,
|
|
|
+ toUint8Array: toUint8Array,
|
|
|
+ extendString: extendString,
|
|
|
+ extendUint8Array: extendUint8Array,
|
|
|
+ extendBuiltins: extendBuiltins,
|
|
|
+ };
|
|
|
+ //
|
|
|
+ // export Base64 to the namespace
|
|
|
+ //
|
|
|
+ // ES5 is yet to have Object.assign() that may make transpilers unhappy.
|
|
|
+ // gBase64.Base64 = Object.assign({}, gBase64);
|
|
|
+ gBase64.Base64 = {};
|
|
|
+ Object.keys(gBase64).forEach(function (k) {
|
|
|
+ return (gBase64.Base64[k] = gBase64[k]);
|
|
|
+ });
|
|
|
+ return gBase64;
|
|
|
+ }
|
|
|
+);
|