realistic-structured-clone
Version:
A pure JS implementation of the structured clone algorithm (or at least something pretty close to that)
1,112 lines (1,020 loc) • 89.6 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.realisticStructuredClone = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){
'use strict';
var DOMException = _dereq_('domexception');
var Typeson = _dereq_('typeson');
var structuredCloningThrowing = _dereq_('typeson-registry/dist/presets/structured-cloning-throwing');
// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js
var globalVar = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' ? self : typeof global !== 'undefined' ? global : Function('return this;')();
if (!globalVar.DOMException) {
globalVar.DOMException = DOMException;
}
var TSON = new Typeson().register(structuredCloningThrowing);
function realisticStructuredClone(obj) {
return TSON.revive(TSON.encapsulate(obj));
}
module.exports = realisticStructuredClone;
},{"domexception":5,"typeson":8,"typeson-registry/dist/presets/structured-cloning-throwing":7}],2:[function(_dereq_,module,exports){
"use strict";
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var legacyErrorCodes = _dereq_("./legacy-error-codes.json");
var idlUtils = _dereq_("./utils.js");
exports.implementation = function () {
function DOMExceptionImpl(_ref) {
var _ref2 = _slicedToArray(_ref, 2),
message = _ref2[0],
name = _ref2[1];
_classCallCheck(this, DOMExceptionImpl);
this.name = name;
this.message = message;
}
_createClass(DOMExceptionImpl, [{
key: "code",
get: function get() {
return legacyErrorCodes[this.name] || 0;
}
}]);
return DOMExceptionImpl;
}();
// A proprietary V8 extension that causes the stack property to appear.
exports.init = function (impl) {
if (Error.captureStackTrace) {
var wrapper = idlUtils.wrapperForImpl(impl);
Error.captureStackTrace(wrapper, wrapper.constructor);
}
};
},{"./legacy-error-codes.json":4,"./utils.js":6}],3:[function(_dereq_,module,exports){
"use strict";
var conversions = _dereq_("webidl-conversions");
var utils = _dereq_("./utils.js");
var impl = utils.implSymbol;
function DOMException() {
var args = [];
for (var i = 0; i < arguments.length && i < 2; ++i) {
args[i] = arguments[i];
}
if (args[0] !== undefined) {
args[0] = conversions["DOMString"](args[0], { context: "Failed to construct 'DOMException': parameter 1" });
} else {
args[0] = "";
}
if (args[1] !== undefined) {
args[1] = conversions["DOMString"](args[1], { context: "Failed to construct 'DOMException': parameter 2" });
} else {
args[1] = "Error";
}
iface.setup(this, args);
}
Object.defineProperty(DOMException, "prototype", {
value: DOMException.prototype,
writable: false,
enumerable: false,
configurable: false
});
Object.defineProperty(DOMException.prototype, "name", {
get: function get() {
return this[impl]["name"];
},
enumerable: true,
configurable: true
});
Object.defineProperty(DOMException.prototype, "message", {
get: function get() {
return this[impl]["message"];
},
enumerable: true,
configurable: true
});
Object.defineProperty(DOMException.prototype, "code", {
get: function get() {
return this[impl]["code"];
},
enumerable: true,
configurable: true
});
Object.defineProperty(DOMException, "INDEX_SIZE_ERR", {
value: 1,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INDEX_SIZE_ERR", {
value: 1,
enumerable: true
});
Object.defineProperty(DOMException, "DOMSTRING_SIZE_ERR", {
value: 2,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "DOMSTRING_SIZE_ERR", {
value: 2,
enumerable: true
});
Object.defineProperty(DOMException, "HIERARCHY_REQUEST_ERR", {
value: 3,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "HIERARCHY_REQUEST_ERR", {
value: 3,
enumerable: true
});
Object.defineProperty(DOMException, "WRONG_DOCUMENT_ERR", {
value: 4,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "WRONG_DOCUMENT_ERR", {
value: 4,
enumerable: true
});
Object.defineProperty(DOMException, "INVALID_CHARACTER_ERR", {
value: 5,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INVALID_CHARACTER_ERR", {
value: 5,
enumerable: true
});
Object.defineProperty(DOMException, "NO_DATA_ALLOWED_ERR", {
value: 6,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NO_DATA_ALLOWED_ERR", {
value: 6,
enumerable: true
});
Object.defineProperty(DOMException, "NO_MODIFICATION_ALLOWED_ERR", {
value: 7,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NO_MODIFICATION_ALLOWED_ERR", {
value: 7,
enumerable: true
});
Object.defineProperty(DOMException, "NOT_FOUND_ERR", {
value: 8,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NOT_FOUND_ERR", {
value: 8,
enumerable: true
});
Object.defineProperty(DOMException, "NOT_SUPPORTED_ERR", {
value: 9,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NOT_SUPPORTED_ERR", {
value: 9,
enumerable: true
});
Object.defineProperty(DOMException, "INUSE_ATTRIBUTE_ERR", {
value: 10,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INUSE_ATTRIBUTE_ERR", {
value: 10,
enumerable: true
});
Object.defineProperty(DOMException, "INVALID_STATE_ERR", {
value: 11,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INVALID_STATE_ERR", {
value: 11,
enumerable: true
});
Object.defineProperty(DOMException, "SYNTAX_ERR", {
value: 12,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "SYNTAX_ERR", {
value: 12,
enumerable: true
});
Object.defineProperty(DOMException, "INVALID_MODIFICATION_ERR", {
value: 13,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INVALID_MODIFICATION_ERR", {
value: 13,
enumerable: true
});
Object.defineProperty(DOMException, "NAMESPACE_ERR", {
value: 14,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NAMESPACE_ERR", {
value: 14,
enumerable: true
});
Object.defineProperty(DOMException, "INVALID_ACCESS_ERR", {
value: 15,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INVALID_ACCESS_ERR", {
value: 15,
enumerable: true
});
Object.defineProperty(DOMException, "VALIDATION_ERR", {
value: 16,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "VALIDATION_ERR", {
value: 16,
enumerable: true
});
Object.defineProperty(DOMException, "TYPE_MISMATCH_ERR", {
value: 17,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "TYPE_MISMATCH_ERR", {
value: 17,
enumerable: true
});
Object.defineProperty(DOMException, "SECURITY_ERR", {
value: 18,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "SECURITY_ERR", {
value: 18,
enumerable: true
});
Object.defineProperty(DOMException, "NETWORK_ERR", {
value: 19,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "NETWORK_ERR", {
value: 19,
enumerable: true
});
Object.defineProperty(DOMException, "ABORT_ERR", {
value: 20,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "ABORT_ERR", {
value: 20,
enumerable: true
});
Object.defineProperty(DOMException, "URL_MISMATCH_ERR", {
value: 21,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "URL_MISMATCH_ERR", {
value: 21,
enumerable: true
});
Object.defineProperty(DOMException, "QUOTA_EXCEEDED_ERR", {
value: 22,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "QUOTA_EXCEEDED_ERR", {
value: 22,
enumerable: true
});
Object.defineProperty(DOMException, "TIMEOUT_ERR", {
value: 23,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "TIMEOUT_ERR", {
value: 23,
enumerable: true
});
Object.defineProperty(DOMException, "INVALID_NODE_TYPE_ERR", {
value: 24,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "INVALID_NODE_TYPE_ERR", {
value: 24,
enumerable: true
});
Object.defineProperty(DOMException, "DATA_CLONE_ERR", {
value: 25,
enumerable: true
});
Object.defineProperty(DOMException.prototype, "DATA_CLONE_ERR", {
value: 25,
enumerable: true
});
Object.defineProperty(DOMException.prototype, Symbol.toStringTag, {
value: "DOMException",
writable: false,
enumerable: false,
configurable: true
});
var iface = {
mixedInto: [],
is: function is(obj) {
if (obj) {
if (obj[impl] instanceof Impl.implementation) {
return true;
}
for (var i = 0; i < module.exports.mixedInto.length; ++i) {
if (obj instanceof module.exports.mixedInto[i]) {
return true;
}
}
}
return false;
},
isImpl: function isImpl(obj) {
if (obj) {
if (obj instanceof Impl.implementation) {
return true;
}
var wrapper = utils.wrapperForImpl(obj);
for (var i = 0; i < module.exports.mixedInto.length; ++i) {
if (wrapper instanceof module.exports.mixedInto[i]) {
return true;
}
}
}
return false;
},
convert: function convert(obj) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$context = _ref.context,
context = _ref$context === undefined ? "The provided value" : _ref$context;
if (module.exports.is(obj)) {
return utils.implForWrapper(obj);
}
throw new TypeError(context + " is not of type 'DOMException'.");
},
create: function create(constructorArgs, privateData) {
var obj = Object.create(DOMException.prototype);
this.setup(obj, constructorArgs, privateData);
return obj;
},
createImpl: function createImpl(constructorArgs, privateData) {
var obj = Object.create(DOMException.prototype);
this.setup(obj, constructorArgs, privateData);
return utils.implForWrapper(obj);
},
_internalSetup: function _internalSetup(obj) {},
setup: function setup(obj, constructorArgs, privateData) {
if (!privateData) privateData = {};
privateData.wrapper = obj;
this._internalSetup(obj);
Object.defineProperty(obj, impl, {
value: new Impl.implementation(constructorArgs, privateData),
writable: false,
enumerable: false,
configurable: true
});
obj[impl][utils.wrapperSymbol] = obj;
if (Impl.init) {
Impl.init(obj[impl], privateData);
}
},
interface: DOMException,
expose: {
Window: { DOMException: DOMException },
Worker: { DOMException: DOMException }
}
}; // iface
module.exports = iface;
var Impl = _dereq_(".//DOMException-impl.js");
},{".//DOMException-impl.js":2,"./utils.js":6,"webidl-conversions":9}],4:[function(_dereq_,module,exports){
module.exports={
"IndexSizeError": 1,
"DOMStringSizeError": 2,
"HierarchyRequestError": 3,
"WrongDocumentError": 4,
"InvalidCharacterError": 5,
"NoDataAllowedError": 6,
"NoModificationAllowedError": 7,
"NotFoundError": 8,
"NotSupportedError": 9,
"InUseAttributeError": 10,
"InvalidStateError": 11,
"SyntaxError": 12,
"InvalidModificationError": 13,
"NamespaceError": 14,
"InvalidAccessError": 15,
"ValidationError": 16,
"TypeMismatchError": 17,
"SecurityError": 18,
"NetworkError": 19,
"AbortError": 20,
"URLMismatchError": 21,
"QuotaExceededError": 22,
"TimeoutError": 23,
"InvalidNodeTypeError": 24,
"DataCloneError": 25
}
},{}],5:[function(_dereq_,module,exports){
"use strict";
module.exports = _dereq_("./DOMException").interface;
Object.setPrototypeOf(module.exports.prototype, Error.prototype);
},{"./DOMException":3}],6:[function(_dereq_,module,exports){
"use strict";
// Returns "Type(value) is Object" in ES terminology.
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function isObject(value) {
return (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && value !== null || typeof value === "function";
}
function getReferenceToBytes(bufferSource) {
// Node.js' Buffer does not allow subclassing for now, so we can get away with a prototype object check for perf.
if (Object.getPrototypeOf(bufferSource) === Buffer.prototype) {
return bufferSource;
}
if (bufferSource instanceof ArrayBuffer) {
return Buffer.from(bufferSource);
}
return Buffer.from(bufferSource.buffer, bufferSource.byteOffset, bufferSource.byteLength);
}
function getCopyToBytes(bufferSource) {
return Buffer.from(getReferenceToBytes(bufferSource));
}
function mixin(target, source) {
var keys = Object.getOwnPropertyNames(source);
for (var i = 0; i < keys.length; ++i) {
if (keys[i] in target) {
continue;
}
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
}
var wrapperSymbol = Symbol("wrapper");
var implSymbol = Symbol("impl");
var sameObjectCaches = Symbol("SameObject caches");
function getSameObject(wrapper, prop, creator) {
if (!wrapper[sameObjectCaches]) {
wrapper[sameObjectCaches] = Object.create(null);
}
if (prop in wrapper[sameObjectCaches]) {
return wrapper[sameObjectCaches][prop];
}
wrapper[sameObjectCaches][prop] = creator();
return wrapper[sameObjectCaches][prop];
}
function wrapperForImpl(impl) {
return impl ? impl[wrapperSymbol] : null;
}
function implForWrapper(wrapper) {
return wrapper ? wrapper[implSymbol] : null;
}
function tryWrapperForImpl(impl) {
var wrapper = wrapperForImpl(impl);
return wrapper ? wrapper : impl;
}
function tryImplForWrapper(wrapper) {
var impl = implForWrapper(wrapper);
return impl ? impl : wrapper;
}
var iterInternalSymbol = Symbol("internal");
var IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
module.exports = exports = {
isObject: isObject,
getReferenceToBytes: getReferenceToBytes,
getCopyToBytes: getCopyToBytes,
mixin: mixin,
wrapperSymbol: wrapperSymbol,
implSymbol: implSymbol,
getSameObject: getSameObject,
wrapperForImpl: wrapperForImpl,
implForWrapper: implForWrapper,
tryWrapperForImpl: tryWrapperForImpl,
tryImplForWrapper: tryImplForWrapper,
iterInternalSymbol: iterInternalSymbol,
IteratorPrototype: IteratorPrototype
};
},{}],7:[function(_dereq_,module,exports){
"use strict";
var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
!function (e, t) {
"object" == (typeof exports === "undefined" ? "undefined" : _typeof2(exports)) && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : ((e = "undefined" != typeof globalThis ? globalThis : e || self).Typeson = e.Typeson || {}, e.Typeson.presets = e.Typeson.presets || {}, e.Typeson.presets.structuredCloningThrowing = t());
}(undefined, function () {
"use strict";
function _typeof$1(e) {
return (_typeof$1 = "function" == typeof Symbol && "symbol" == _typeof2(Symbol.iterator) ? function (e) {
return typeof e === "undefined" ? "undefined" : _typeof2(e);
} : function (e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e === "undefined" ? "undefined" : _typeof2(e);
})(e);
}function _classCallCheck$1(e, t) {
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
}function _defineProperties$1(e, t) {
for (var r = 0; r < t.length; r++) {
var n = t[r];n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
}
}function _defineProperty$1(e, t, r) {
return t in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e;
}function ownKeys$1(e, t) {
var r = Object.keys(e);if (Object.getOwnPropertySymbols) {
var n = Object.getOwnPropertySymbols(e);t && (n = n.filter(function (t) {
return Object.getOwnPropertyDescriptor(e, t).enumerable;
})), r.push.apply(r, n);
}return r;
}function _toConsumableArray$1(e) {
return function _arrayWithoutHoles$1(e) {
if (Array.isArray(e)) return _arrayLikeToArray$1(e);
}(e) || function _iterableToArray$1(e) {
if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e);
}(e) || function _unsupportedIterableToArray$1(e, t) {
if (!e) return;if ("string" == typeof e) return _arrayLikeToArray$1(e, t);var r = Object.prototype.toString.call(e).slice(8, -1);"Object" === r && e.constructor && (r = e.constructor.name);if ("Map" === r || "Set" === r) return Array.from(e);if ("Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)) return _arrayLikeToArray$1(e, t);
}(e) || function _nonIterableSpread$1() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}function _arrayLikeToArray$1(e, t) {
(null == t || t > e.length) && (t = e.length);for (var r = 0, n = new Array(t); r < t; r++) {
n[r] = e[r];
}return n;
}function _typeof(e) {
return (_typeof = "function" == typeof Symbol && "symbol" == _typeof2(Symbol.iterator) ? function _typeof(e) {
return typeof e === "undefined" ? "undefined" : _typeof2(e);
} : function _typeof(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e === "undefined" ? "undefined" : _typeof2(e);
})(e);
}function _classCallCheck(e, t) {
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
}function _defineProperties(e, t) {
for (var r = 0; r < t.length; r++) {
var n = t[r];n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
}
}function _defineProperty(e, t, r) {
return t in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e;
}function ownKeys(e, t) {
var r = Object.keys(e);if (Object.getOwnPropertySymbols) {
var n = Object.getOwnPropertySymbols(e);t && (n = n.filter(function (t) {
return Object.getOwnPropertyDescriptor(e, t).enumerable;
})), r.push.apply(r, n);
}return r;
}function _objectSpread2(e) {
for (var t = 1; t < arguments.length; t++) {
var r = null != arguments[t] ? arguments[t] : {};t % 2 ? ownKeys(Object(r), !0).forEach(function (t) {
_defineProperty(e, t, r[t]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : ownKeys(Object(r)).forEach(function (t) {
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
});
}return e;
}function _slicedToArray(e, t) {
return function _arrayWithHoles(e) {
if (Array.isArray(e)) return e;
}(e) || function _iterableToArrayLimit(e, t) {
if ("undefined" == typeof Symbol || !(Symbol.iterator in Object(e))) return;var r = [],
n = !0,
i = !1,
o = void 0;try {
for (var a, c = e[Symbol.iterator](); !(n = (a = c.next()).done) && (r.push(a.value), !t || r.length !== t); n = !0) {}
} catch (e) {
i = !0, o = e;
} finally {
try {
n || null == c.return || c.return();
} finally {
if (i) throw o;
}
}return r;
}(e, t) || _unsupportedIterableToArray(e, t) || function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}function _toConsumableArray(e) {
return function _arrayWithoutHoles(e) {
if (Array.isArray(e)) return _arrayLikeToArray(e);
}(e) || function _iterableToArray(e) {
if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e);
}(e) || _unsupportedIterableToArray(e) || function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}function _unsupportedIterableToArray(e, t) {
if (e) {
if ("string" == typeof e) return _arrayLikeToArray(e, t);var r = Object.prototype.toString.call(e).slice(8, -1);return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? _arrayLikeToArray(e, t) : void 0;
}
}function _arrayLikeToArray(e, t) {
(null == t || t > e.length) && (t = e.length);for (var r = 0, n = new Array(t); r < t; r++) {
n[r] = e[r];
}return n;
}var e = function TypesonPromise(e) {
_classCallCheck(this, TypesonPromise), this.p = new Promise(e);
};e.__typeson__type__ = "TypesonPromise", "undefined" != typeof Symbol && (e.prototype[Symbol.toStringTag] = "TypesonPromise"), e.prototype.then = function (t, r) {
var n = this;return new e(function (e, i) {
n.p.then(function (r) {
e(t ? t(r) : r);
}).catch(function (e) {
return r ? r(e) : Promise.reject(e);
}).then(e, i);
});
}, e.prototype.catch = function (e) {
return this.then(null, e);
}, e.resolve = function (t) {
return new e(function (e) {
e(t);
});
}, e.reject = function (t) {
return new e(function (e, r) {
r(t);
});
}, ["all", "race"].forEach(function (t) {
e[t] = function (r) {
return new e(function (e, n) {
Promise[t](r.map(function (e) {
return e && e.constructor && "TypesonPromise" === e.constructor.__typeson__type__ ? e.p : e;
})).then(e, n);
});
};
});var t = {}.toString,
r = {}.hasOwnProperty,
n = Object.getPrototypeOf,
i = r.toString;function isThenable(e, t) {
return isObject(e) && "function" == typeof e.then && (!t || "function" == typeof e.catch);
}function toStringTag(e) {
return t.call(e).slice(8, -1);
}function hasConstructorOf(e, t) {
if (!e || "object" !== _typeof(e)) return !1;var o = n(e);if (!o) return null === t;var a = r.call(o, "constructor") && o.constructor;return "function" != typeof a ? null === t : t === a || null !== t && i.call(a) === i.call(t) || "function" == typeof t && "string" == typeof a.__typeson__type__ && a.__typeson__type__ === t.__typeson__type__;
}function isPlainObject(e) {
return !(!e || "Object" !== toStringTag(e)) && (!n(e) || hasConstructorOf(e, Object));
}function isObject(e) {
return e && "object" === _typeof(e);
}function escapeKeyPathComponent(e) {
return e.replace(/~/g, "~0").replace(/\./g, "~1");
}function unescapeKeyPathComponent(e) {
return e.replace(/~1/g, ".").replace(/~0/g, "~");
}function getByKeyPath(e, t) {
if ("" === t) return e;var r = t.indexOf(".");if (r > -1) {
var n = e[unescapeKeyPathComponent(t.slice(0, r))];return void 0 === n ? void 0 : getByKeyPath(n, t.slice(r + 1));
}return e[unescapeKeyPathComponent(t)];
}function setAtKeyPath(e, t, r) {
if ("" === t) return r;var n = t.indexOf(".");return n > -1 ? setAtKeyPath(e[unescapeKeyPathComponent(t.slice(0, n))], t.slice(n + 1), r) : (e[unescapeKeyPathComponent(t)] = r, e);
}function _await(e, t, r) {
return r ? t ? t(e) : e : (e && e.then || (e = Promise.resolve(e)), t ? e.then(t) : e);
}var o = Object.keys,
a = Array.isArray,
c = {}.hasOwnProperty,
u = ["type", "replaced", "iterateIn", "iterateUnsetNumeric"];function _async(e) {
return function () {
for (var t = [], r = 0; r < arguments.length; r++) {
t[r] = arguments[r];
}try {
return Promise.resolve(e.apply(this, t));
} catch (e) {
return Promise.reject(e);
}
};
}function nestedPathsFirst(e, t) {
if ("" === e.keypath) return -1;var r = e.keypath.match(/\./g) || 0,
n = t.keypath.match(/\./g) || 0;return r && (r = r.length), n && (n = n.length), r > n ? -1 : r < n ? 1 : e.keypath < t.keypath ? -1 : e.keypath > t.keypath;
}var s = function () {
function Typeson(e) {
_classCallCheck(this, Typeson), this.options = e, this.plainObjectReplacers = [], this.nonplainObjectReplacers = [], this.revivers = {}, this.types = {};
}return function _createClass(e, t, r) {
return t && _defineProperties(e.prototype, t), r && _defineProperties(e, r), e;
}(Typeson, [{ key: "stringify", value: function stringify(e, t, r, n) {
n = _objectSpread2(_objectSpread2(_objectSpread2({}, this.options), n), {}, { stringification: !0 });var i = this.encapsulate(e, null, n);return a(i) ? JSON.stringify(i[0], t, r) : i.then(function (e) {
return JSON.stringify(e, t, r);
});
} }, { key: "stringifySync", value: function stringifySync(e, t, r, n) {
return this.stringify(e, t, r, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, n), {}, { sync: !0 }));
} }, { key: "stringifyAsync", value: function stringifyAsync(e, t, r, n) {
return this.stringify(e, t, r, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, n), {}, { sync: !1 }));
} }, { key: "parse", value: function parse(e, t, r) {
return r = _objectSpread2(_objectSpread2(_objectSpread2({}, this.options), r), {}, { parse: !0 }), this.revive(JSON.parse(e, t), r);
} }, { key: "parseSync", value: function parseSync(e, t, r) {
return this.parse(e, t, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, r), {}, { sync: !0 }));
} }, { key: "parseAsync", value: function parseAsync(e, t, r) {
return this.parse(e, t, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, r), {}, { sync: !1 }));
} }, { key: "specialTypeNames", value: function specialTypeNames(e, t) {
var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};return r.returnTypeNames = !0, this.encapsulate(e, t, r);
} }, { key: "rootTypeName", value: function rootTypeName(e, t) {
var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};return r.iterateNone = !0, this.encapsulate(e, t, r);
} }, { key: "encapsulate", value: function encapsulate(t, r, n) {
var i = _async(function (t, r) {
return _await(Promise.all(r.map(function (e) {
return e[1].p;
})), function (n) {
return _await(Promise.all(n.map(_async(function (n) {
var o = !1,
a = [],
c = _slicedToArray(r.splice(0, 1), 1),
u = _slicedToArray(c[0], 7),
s = u[0],
f = u[2],
l = u[3],
p = u[4],
y = u[5],
v = u[6],
b = _encapsulate(s, n, f, l, a, !0, v),
d = hasConstructorOf(b, e);return function _invoke(e, t) {
var r = e();return r && r.then ? r.then(t) : t(r);
}(function () {
if (s && d) return _await(b.p, function (e) {
return p[y] = e, o = !0, i(t, a);
});
}, function (e) {
return o ? e : (s ? p[y] = b : t = d ? b.p : b, i(t, a));
});
}))), function () {
return t;
});
});
}),
s = (n = _objectSpread2(_objectSpread2({ sync: !0 }, this.options), n)).sync,
f = this,
l = {},
p = [],
y = [],
v = [],
b = !("cyclic" in n) || n.cyclic,
d = n.encapsulateObserver,
h = _encapsulate("", t, b, r || {}, v);function finish(e) {
var t = Object.values(l);if (n.iterateNone) return t.length ? t[0] : Typeson.getJSONType(e);if (t.length) {
if (n.returnTypeNames) return _toConsumableArray(new Set(t));e && isPlainObject(e) && !c.call(e, "$types") ? e.$types = l : e = { $: e, $types: { $: l } };
} else isObject(e) && c.call(e, "$types") && (e = { $: e, $types: !0 });return !n.returnTypeNames && e;
}function _adaptBuiltinStateObjectProperties(e, t, r) {
Object.assign(e, t);var n = u.map(function (t) {
var r = e[t];return delete e[t], r;
});r(), u.forEach(function (t, r) {
e[t] = n[r];
});
}function _encapsulate(t, r, i, u, s, v, b) {
var h,
g = {},
m = _typeof(r),
O = d ? function (n) {
var o = b || u.type || Typeson.getJSONType(r);d(Object.assign(n || g, { keypath: t, value: r, cyclic: i, stateObj: u, promisesData: s, resolvingTypesonPromise: v, awaitingTypesonPromise: hasConstructorOf(r, e) }, { type: o }));
} : null;if (["string", "boolean", "number", "undefined"].includes(m)) return void 0 === r || Number.isNaN(r) || r === Number.NEGATIVE_INFINITY || r === Number.POSITIVE_INFINITY ? (h = u.replaced ? r : replace(t, r, u, s, !1, v, O)) !== r && (g = { replaced: h }) : h = r, O && O(), h;if (null === r) return O && O(), r;if (i && !u.iterateIn && !u.iterateUnsetNumeric && r && "object" === _typeof(r)) {
var _ = p.indexOf(r);if (!(_ < 0)) return l[t] = "#", O && O({ cyclicKeypath: y[_] }), "#" + y[_];!0 === i && (p.push(r), y.push(t));
}var j,
S = isPlainObject(r),
T = a(r),
w = (S || T) && (!f.plainObjectReplacers.length || u.replaced) || u.iterateIn ? r : replace(t, r, u, s, S || T, null, O);if (w !== r ? (h = w, g = { replaced: w }) : "" === t && hasConstructorOf(r, e) ? (s.push([t, r, i, u, void 0, void 0, u.type]), h = r) : T && "object" !== u.iterateIn || "array" === u.iterateIn ? (j = new Array(r.length), g = { clone: j }) : (["function", "symbol"].includes(_typeof(r)) || "toJSON" in r || hasConstructorOf(r, e) || hasConstructorOf(r, Promise) || hasConstructorOf(r, ArrayBuffer)) && !S && "object" !== u.iterateIn ? h = r : (j = {}, u.addLength && (j.length = r.length), g = { clone: j }), O && O(), n.iterateNone) return j || h;if (!j) return h;if (u.iterateIn) {
var A = function _loop(n) {
var o = { ownKeys: c.call(r, n) };_adaptBuiltinStateObjectProperties(u, o, function () {
var o = t + (t ? "." : "") + escapeKeyPathComponent(n),
a = _encapsulate(o, r[n], Boolean(i), u, s, v);hasConstructorOf(a, e) ? s.push([o, a, Boolean(i), u, j, n, u.type]) : void 0 !== a && (j[n] = a);
});
};for (var P in r) {
A(P);
}O && O({ endIterateIn: !0, end: !0 });
} else o(r).forEach(function (n) {
var o = t + (t ? "." : "") + escapeKeyPathComponent(n);_adaptBuiltinStateObjectProperties(u, { ownKeys: !0 }, function () {
var t = _encapsulate(o, r[n], Boolean(i), u, s, v);hasConstructorOf(t, e) ? s.push([o, t, Boolean(i), u, j, n, u.type]) : void 0 !== t && (j[n] = t);
});
}), O && O({ endIterateOwn: !0, end: !0 });if (u.iterateUnsetNumeric) {
for (var C = r.length, I = function _loop2(n) {
if (!(n in r)) {
var o = t + (t ? "." : "") + n;_adaptBuiltinStateObjectProperties(u, { ownKeys: !1 }, function () {
var t = _encapsulate(o, void 0, Boolean(i), u, s, v);hasConstructorOf(t, e) ? s.push([o, t, Boolean(i), u, j, n, u.type]) : void 0 !== t && (j[n] = t);
});
}
}, N = 0; N < C; N++) {
I(N);
}O && O({ endIterateUnsetNumeric: !0, end: !0 });
}return j;
}function replace(e, t, r, n, i, o, a) {
for (var c = i ? f.plainObjectReplacers : f.nonplainObjectReplacers, u = c.length; u--;) {
var p = c[u];if (p.test(t, r)) {
var y = p.type;if (f.revivers[y]) {
var v = l[e];l[e] = v ? [y].concat(v) : y;
}return Object.assign(r, { type: y, replaced: !0 }), !s && p.replaceAsync || p.replace ? (a && a({ replacing: !0 }), _encapsulate(e, p[s || !p.replaceAsync ? "replace" : "replaceAsync"](t, r), b && "readonly", r, n, o, y)) : (a && a({ typeDetected: !0 }), _encapsulate(e, t, b && "readonly", r, n, o, y));
}
}return t;
}return v.length ? s && n.throwOnBadSyncType ? function () {
throw new TypeError("Sync method requested but async result obtained");
}() : Promise.resolve(i(h, v)).then(finish) : !s && n.throwOnBadSyncType ? function () {
throw new TypeError("Async method requested but sync result obtained");
}() : n.stringification && s ? [finish(h)] : s ? finish(h) : Promise.resolve(finish(h));
} }, { key: "encapsulateSync", value: function encapsulateSync(e, t, r) {
return this.encapsulate(e, t, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, r), {}, { sync: !0 }));
} }, { key: "encapsulateAsync", value: function encapsulateAsync(e, t, r) {
return this.encapsulate(e, t, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, r), {}, { sync: !1 }));
} }, { key: "revive", value: function revive(t, r) {
var n = t && t.$types;if (!n) return t;if (!0 === n) return t.$;var i = (r = _objectSpread2(_objectSpread2({ sync: !0 }, this.options), r)).sync,
c = [],
u = {},
s = !0;n.$ && isPlainObject(n.$) && (t = t.$, n = n.$, s = !1);var l = this;function executeReviver(e, t) {
var r = _slicedToArray(l.revivers[e] || [], 1)[0];if (!r) throw new Error("Unregistered type: " + e);return i && !("revive" in r) ? t : r[i && r.revive ? "revive" : !i && r.reviveAsync ? "reviveAsync" : "revive"](t, u);
}var p = [];function checkUndefined(e) {
return hasConstructorOf(e, f) ? void 0 : e;
}var y,
v = function revivePlainObjects() {
var r = [];if (Object.entries(n).forEach(function (e) {
var t = _slicedToArray(e, 2),
i = t[0],
o = t[1];"#" !== o && [].concat(o).forEach(function (e) {
_slicedToArray(l.revivers[e] || [null, {}], 2)[1].plain && (r.push({ keypath: i, type: e }), delete n[i]);
});
}), r.length) return r.sort(nestedPathsFirst).reduce(function reducer(r, n) {
var i = n.keypath,
o = n.type;if (isThenable(r)) return r.then(function (e) {
return reducer(e, { keypath: i, type: o });
});var a = getByKeyPath(t, i);if (hasConstructorOf(a = executeReviver(o, a), e)) return a.then(function (e) {
var r = setAtKeyPath(t, i, e);r === e && (t = r);
});var c = setAtKeyPath(t, i, a);c === a && (t = c);
}, void 0);
}();return hasConstructorOf(v, e) ? y = v.then(function () {
return t;
}) : (y = function _revive(t, r, i, u, l) {
if (!s || "$types" !== t) {
var y = n[t],
v = a(r);if (v || isPlainObject(r)) {
var b = v ? new Array(r.length) : {};for (o(r).forEach(function (n) {
var o = _revive(t + (t ? "." : "") + escapeKeyPathComponent(n), r[n], i || b, b, n),
a = function set(e) {
return hasConstructorOf(e, f) ? b[n] = void 0 : void 0 !== e && (b[n] = e), e;
};hasConstructorOf(o, e) ? p.push(o.then(function (e) {
return a(e);
})) : a(o);
}), r = b; c.length;) {
var d = _slicedToArray(c[0], 4),
h = d[0],
g = d[1],
m = d[2],
O = d[3],
_ = getByKeyPath(h, g);if (void 0 === _) break;m[O] = _, c.splice(0, 1);
}
}if (!y) return r;if ("#" === y) {
var j = getByKeyPath(i, r.slice(1));return void 0 === j && c.push([i, r.slice(1), u, l]), j;
}return [].concat(y).reduce(function reducer(t, r) {
return hasConstructorOf(t, e) ? t.then(function (e) {
return reducer(e, r);
}) : executeReviver(r, t);
}, r);
}
}("", t, null), p.length && (y = e.resolve(y).then(function (t) {
return e.all([t].concat(p));
}).then(function (e) {
return _slicedToArray(e, 1)[0];
}))), isThenable(y) ? i && r.throwOnBadSyncType ? function () {
throw new TypeError("Sync method requested but async result obtained");
}() : hasConstructorOf(y, e) ? y.p.then(checkUndefined) : y : !i && r.throwOnBadSyncType ? function () {
throw new TypeError("Async method requested but sync result obtained");
}() : i ? checkUndefined(y) : Promise.resolve(checkUndefined(y));
} }, { key: "reviveSync", value: function reviveSync(e, t) {
return this.revive(e, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, t), {}, { sync: !0 }));
} }, { key: "reviveAsync", value: function reviveAsync(e, t) {
return this.revive(e, _objectSpread2(_objectSpread2({ throwOnBadSyncType: !0 }, t), {}, { sync: !1 }));
} }, { key: "register", value: function register(e, t) {
return t = t || {}, [].concat(e).forEach(function R(e) {
var r = this;if (a(e)) return e.map(function (e) {
return R.call(r, e);
});e && o(e).forEach(function (r) {
if ("#" === r) throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if (Typeson.JSON_TYPES.includes(r)) throw new TypeError("Plain JSON object types are reserved as type names");var n = e[r],
i = n && n.testPlainObjects ? this.plainObjectReplacers : this.nonplainObjectReplacers,
o = i.filter(function (e) {
return e.type === r;
});if (o.length && (i.splice(i.indexOf(o[0]), 1), delete this.revivers[r], delete this.types[r]), "function" == typeof n) {
var c = n;n = { test: function test(e) {
return e && e.constructor === c;
}, replace: function replace(e) {
return _objectSpread2({}, e);
}, revive: function revive(e) {
return Object.assign(Object.create(c.prototype), e);
} };
} else if (a(n)) {
var u = _slicedToArray(n, 3);n = { test: u[0], replace: u[1], revive: u[2] };
}if (n && n.test) {
var s = { type: r, test: n.test.bind(n) };n.replace && (s.replace = n.replace.bind(n)), n.replaceAsync && (s.replaceAsync = n.replaceAsync.bind(n));var f = "number" == typeof t.fallback ? t.fallback : t.fallback ? 0 : Number.POSITIVE_INFINITY;if (n.testPlainObjects ? this.plainObjectReplacers.splice(f, 0, s) : this.nonplainObjectReplacers.splice(f, 0, s), n.revive || n.reviveAsync) {
var l = {};n.revive && (l.revive = n.revive.bind(n)), n.reviveAsync && (l.reviveAsync = n.reviveAsync.bind(n)), this.revivers[r] = [l, { plain: n.testPlainObjects }];
}this.types[r] = n;
}
}, this);
}, this), this;
} }]), Typeson;
}(),
f = function Undefined() {
_classCallCheck(this, Undefined);
};f.__typeson__type__ = "TypesonUndefined", s.Undefined = f, s.Promise = e, s.isThenable = isThenable, s.toStringTag = toStringTag, s.hasConstructorOf = hasConstructorOf, s.isObject = isObject, s.isPlainObject = isPlainObject, s.isUserObject = function isUserObject(e) {
if (!e || "Object" !== toStringTag(e)) return !1;var t = n(e);return !t || hasConstructorOf(e, Object) || isUserObject(t);
}, s.escapeKeyPathComponent = escapeKeyPathComponent, s.unescapeKeyPathComponent = unescapeKeyPathComponent, s.getByKeyPath = getByKeyPath, s.getJSONType = function getJSONType(e) {
return null === e ? "null" : Array.isArray(e) ? "array" : _typeof(e);
}, s.JSON_TYPES = ["null", "boolean", "number", "string", "array", "object"];for (var l = { userObject: { test: function test(e, t) {
return s.isUserObject(e);
}, replace: function replace(e) {
return function _objectSpread2$1(e) {
for (var t = 1; t < arguments.length; t++) {
var r = null != arguments[t] ? arguments[t] : {};t % 2 ? ownKeys$1(Object(r), !0).forEach(function (t) {
_defineProperty$1(e, t, r[t]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : ownKeys$1(Object(r)).forEach(function (t) {
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
});
}return e;
}({}, e);
}, revive: function revive(e) {
return e;
} } }, p = [{ arrayNonindexKeys: { testPlainObjects: !0, test: function test(e, t) {
return !!Array.isArray(e) && (Object.keys(e).some(function (e) {
return String(Number.parseInt(e)) !== e;
}) && (t.iterateIn = "object", t.addLength = !0), !0);
}, replace: function replace(e, t) {
return t.iterateUnsetNumeric = !0, e;
}, revive: function revive(e) {
if (Array.isArray(e)) return e;var t = [];return Object.keys(e).forEach(function (r) {
var n = e[r];t[r] = n;
}), t;
} } }, { sparseUndefined: { test: function test(e, t) {
return void 0 === e && !1 === t.ownKeys;
}, replace: function replace(e) {
return 0;
}, revive: function revive(e) {} } }], y = { undef: { test: function test(e, t) {
return void 0 === e && (t.ownKeys || !("ownKeys" in t));
}, replace: function replace(e) {
return 0;
}, revive: function revive(e) {
return new s.Undefined();
} } }, v = { StringObject: { test: function test(e) {
return "String" === s.toStringTag(e) && "object" === _typeof$1(e);
}, replace: function replace(e) {
return String(e);
}, revive: function revive(e) {
return new String(e);
} }, BooleanObject: { test: function test(e) {
return "Boolean" === s.toStringTag(e) && "object" === _typeof$1(e);
}, replace: function replace(e) {
return Boolean(e);
}, revive: function revive(e) {
return new Boolean(e);
} }, NumberObject: { test: function test(e) {
return "Number" === s.toStringTag(e) && "object" === _typeof$1(e);
}, replace: function replace(e) {
return Number(e);
}, revive: function revive(e) {
return new Number(e);
} } }, b = [{ nan: { test: function test(e) {
return Number.isNaN(e);
}, replace: function replace(e) {
return "NaN";
}, revive: function revive(e) {
return Number.NaN;
} } }, { infinity: { test: function test(e) {
return e === Number.POSITIVE_INFINITY;
}, replace: function replace(e) {
return "Infinity";
}, revive: function revive(e) {
return Number.POSITIVE_INFINITY;
} } }, { negativeInfinity: { test: function test(e) {
return e === Number.NEGATIVE_INFINITY;
}, replace: function replace(e) {
return "-Infinity";
}, revive: function revive(e) {
return Number.NEGATIVE_INFINITY;
} } }], d = { date: { test: function test(e) {
return "Date" === s.toStringTag(e);
}, replace: function replace(e) {
var t = e.getTime();return Number.isNaN(t) ? "NaN" : t;
}, revive: function revive(e) {
return "NaN" === e ? new Date(Number.NaN) : new Date(e);
} } }, h = { regexp: { test: function test(e) {
return "RegExp" === s.toStringTag(e);
}, replace: function replace(e) {
return { source: e.source, flags: (e.global ? "g" : "") + (e.ignoreCase ? "i" : "") + (e.multiline ? "m" : "") + (e.sticky ? "y" : "") + (e.unicode ? "u" : "") };
}, revive: function revive(e) {
var t = e.source,
r = e.flags;return new RegExp(t, r);
} } }, g = { map: { test: function test(e) {
return "Map" === s.toStringTag(e);
}, replace: function replace(e) {
return _toConsumableArray$1(e.entries());
}, revive: function revive(e) {
return new Map(e);
} } }, m = { set: { test: function test(e) {
return "Set" === s.toStringTag(e);
}, replace: function replace(e) {
return _toConsumableArray$1(e.values());
}, revive: function revive(e) {
return new Set(e);
} } }, O = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", _ = new Uint8Array(256), j = 0; j < O.length; j++) {
_[O.charCodeAt(j)] = j;
}var S = function encode(e, t, r) {
null == r && (r = e.byteLength);for (var n = new Uint8Array(e, t || 0, r), i = n.length, o = "", a = 0; a < i; a += 3) {
o += O[n[a] >> 2], o += O[(3 & n[a]) << 4 | n[a + 1] >> 4], o += O[(15 & n[a + 1]) << 2 | n[a + 2] >> 6], o += O[63 & n[a + 2]];
}return i % 3 == 2 ? o = o.slice(0, -1) + "=" : i % 3 == 1 && (o = o.slice(0, -2) + "=="), o;
},
T = function decode(e) {
var t,
r,
n,
i,
o = e.length,
a = .75 * e.length,
c = 0;"=" === e[e.length - 1] && (a--, "=" === e[e.length - 2] && a--);for (var u = new ArrayBuffer(a), s = new Uint8Array(u), f = 0; f < o; f += 4) {
t = _[e.charCodeAt(f)], r = _[e.charCodeAt(f + 1)], n = _[e.charCodeAt(f + 2)], i = _[e.charCodeAt(f + 3)], s[c++] = t << 2 | r >> 4, s[c++] = (15 & r) << 4 | n >> 2, s[c++] = (3 & n) << 6 | 63 & i;
}return u;
},
w = { arraybuffer: { test: function test(e) {
return "ArrayBuffer" === s.toStringTag(e);
}, replace: function replace(e, t) {
t.buffers || (t.buffers = []);var r = t.buffers.indexOf(e);return r > -1 ? { index: r } : (t.buffers.push(e), S(e));
}, revive: function revive(e, t) {
if (t.buffers || (t.buffers = []), "object" === _typeof$1(e)) return t.buffers[e.index];var r = T(e);return t.buffers.push(r), r;
} } },
A = "undefined" == typeof self ? global : self,
P = {};["Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array"].forEach(function (e) {
var t = e,
r = A[t];r && (P[e.toLowerCase()] = { test: function test(e) {
return s.toStringTag(e) === t;
}, replace: function replace(e, t) {
var r = e.buffer,
n = e.byteOffset,
i = e.length;t.buffers || (t.buffers = []);var o = t.buffers.indexOf(r);return o > -1 ? { index: o, byteOffset: n, length: i } : (t.buffers.push(r), { encoded: S(r), byteOffset: n, length: i });
}, revive: function revive(e, t) {
t.buffers || (t.buffers = []);var n,
i = e.byteOffset,
o = e.length,
a = e.encoded,
c = e.index;return "index" in e ? n = t.buffers[c] : (n = T(a), t.buffers.push(n)), new r(n, i, o);
} });
});var C = { dataview: { test: function test(e) {
return "DataView" === s.toStringTag(e);
}, replace: function replace(e, t) {
var r = e.buffer,
n = e.byteOffset,
i = e.byteLength;t.buffers || (t.buffers = []);var o = t.buffers.indexOf(r);return o > -1 ? { index: o, byteOffset: n, byteLength: i } : (t.buffers.push(r), { encoded: S(r), byteOffset: n, byteLength: i });
}, revive: function revive(e, t)