self.Flatted = (function (exports) {
							 | 
						|
								  'use strict';
							 | 
						|
								
							 | 
						|
								  function _typeof(o) {
							 | 
						|
								    "@babel/helpers - typeof";
							 | 
						|
								
							 | 
						|
								    return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
							 | 
						|
								      return typeof o;
							 | 
						|
								    } : function (o) {
							 | 
						|
								      return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
							 | 
						|
								    }, _typeof(o);
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  /// <reference types="../types/index.d.ts" />
							 | 
						|
								
							 | 
						|
								  // (c) 2020-present Andrea Giammarchi
							 | 
						|
								
							 | 
						|
								  var $parse = JSON.parse,
							 | 
						|
								    $stringify = JSON.stringify;
							 | 
						|
								  var keys = Object.keys;
							 | 
						|
								  var Primitive = String; // it could be Number
							 | 
						|
								  var primitive = 'string'; // it could be 'number'
							 | 
						|
								
							 | 
						|
								  var ignore = {};
							 | 
						|
								  var object = 'object';
							 | 
						|
								  var noop = function noop(_, value) {
							 | 
						|
								    return value;
							 | 
						|
								  };
							 | 
						|
								  var primitives = function primitives(value) {
							 | 
						|
								    return value instanceof Primitive ? Primitive(value) : value;
							 | 
						|
								  };
							 | 
						|
								  var Primitives = function Primitives(_, value) {
							 | 
						|
								    return _typeof(value) === primitive ? new Primitive(value) : value;
							 | 
						|
								  };
							 | 
						|
								  var _revive = function revive(input, parsed, output, $) {
							 | 
						|
								    var lazy = [];
							 | 
						|
								    for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) {
							 | 
						|
								      var k = ke[y];
							 | 
						|
								      var value = output[k];
							 | 
						|
								      if (value instanceof Primitive) {
							 | 
						|
								        var tmp = input[value];
							 | 
						|
								        if (_typeof(tmp) === object && !parsed.has(tmp)) {
							 | 
						|
								          parsed.add(tmp);
							 | 
						|
								          output[k] = ignore;
							 | 
						|
								          lazy.push({
							 | 
						|
								            k: k,
							 | 
						|
								            a: [input, parsed, tmp, $]
							 | 
						|
								          });
							 | 
						|
								        } else output[k] = $.call(output, k, tmp);
							 | 
						|
								      } else if (output[k] !== ignore) output[k] = $.call(output, k, value);
							 | 
						|
								    }
							 | 
						|
								    for (var _length = lazy.length, i = 0; i < _length; i++) {
							 | 
						|
								      var _lazy$i = lazy[i],
							 | 
						|
								        _k = _lazy$i.k,
							 | 
						|
								        a = _lazy$i.a;
							 | 
						|
								      output[_k] = $.call(output, _k, _revive.apply(null, a));
							 | 
						|
								    }
							 | 
						|
								    return output;
							 | 
						|
								  };
							 | 
						|
								  var set = function set(known, input, value) {
							 | 
						|
								    var index = Primitive(input.push(value) - 1);
							 | 
						|
								    known.set(value, index);
							 | 
						|
								    return index;
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  /**
							 | 
						|
								   * Converts a specialized flatted string into a JS value.
							 | 
						|
								   * @param {string} text
							 | 
						|
								   * @param {(this: any, key: string, value: any) => any} [reviver]
							 | 
						|
								   * @returns {any}
							 | 
						|
								   */
							 | 
						|
								  var parse = function parse(text, reviver) {
							 | 
						|
								    var input = $parse(text, Primitives).map(primitives);
							 | 
						|
								    var value = input[0];
							 | 
						|
								    var $ = reviver || noop;
							 | 
						|
								    var tmp = _typeof(value) === object && value ? _revive(input, new Set(), value, $) : value;
							 | 
						|
								    return $.call({
							 | 
						|
								      '': tmp
							 | 
						|
								    }, '', tmp);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  /**
							 | 
						|
								   * Converts a JS value into a specialized flatted string.
							 | 
						|
								   * @param {any} value
							 | 
						|
								   * @param {((this: any, key: string, value: any) => any) | (string | number)[] | null | undefined} [replacer]
							 | 
						|
								   * @param {string | number | undefined} [space]
							 | 
						|
								   * @returns {string}
							 | 
						|
								   */
							 | 
						|
								  var stringify = function stringify(value, replacer, space) {
							 | 
						|
								    var $ = replacer && _typeof(replacer) === object ? function (k, v) {
							 | 
						|
								      return k === '' || -1 < replacer.indexOf(k) ? v : void 0;
							 | 
						|
								    } : replacer || noop;
							 | 
						|
								    var known = new Map();
							 | 
						|
								    var input = [];
							 | 
						|
								    var output = [];
							 | 
						|
								    var i = +set(known, input, $.call({
							 | 
						|
								      '': value
							 | 
						|
								    }, '', value));
							 | 
						|
								    var firstRun = !i;
							 | 
						|
								    while (i < input.length) {
							 | 
						|
								      firstRun = true;
							 | 
						|
								      output[i] = $stringify(input[i++], replace, space);
							 | 
						|
								    }
							 | 
						|
								    return '[' + output.join(',') + ']';
							 | 
						|
								    function replace(key, value) {
							 | 
						|
								      if (firstRun) {
							 | 
						|
								        firstRun = !firstRun;
							 | 
						|
								        return value;
							 | 
						|
								      }
							 | 
						|
								      var after = $.call(this, key, value);
							 | 
						|
								      switch (_typeof(after)) {
							 | 
						|
								        case object:
							 | 
						|
								          if (after === null) return after;
							 | 
						|
								        case primitive:
							 | 
						|
								          return known.get(after) || set(known, input, after);
							 | 
						|
								      }
							 | 
						|
								      return after;
							 | 
						|
								    }
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  /**
							 | 
						|
								   * Converts a generic value into a JSON serializable object without losing recursion.
							 | 
						|
								   * @param {any} value
							 | 
						|
								   * @returns {any}
							 | 
						|
								   */
							 | 
						|
								  var toJSON = function toJSON(value) {
							 | 
						|
								    return $parse(stringify(value));
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  /**
							 | 
						|
								   * Converts a previously serialized object with recursion into a recursive one.
							 | 
						|
								   * @param {any} value
							 | 
						|
								   * @returns {any}
							 | 
						|
								   */
							 | 
						|
								  var fromJSON = function fromJSON(value) {
							 | 
						|
								    return parse($stringify(value));
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  exports.fromJSON = fromJSON;
							 | 
						|
								  exports.parse = parse;
							 | 
						|
								  exports.stringify = stringify;
							 | 
						|
								  exports.toJSON = toJSON;
							 | 
						|
								
							 | 
						|
								  return exports;
							 | 
						|
								
							 | 
						|
								})({});
							 |