1 self.Flatted = (function (exports) {
6 /*! (c) 2020 Andrea Giammarchi */
7 var $parse = JSON.parse,
8 $stringify = JSON.stringify;
9 var keys = Object.keys;
10 var Primitive = String; // it could be Number
12 var primitive = 'string'; // it could be 'number'
15 var object = 'object';
17 var noop = function noop(_, value) {
21 var primitives = function primitives(value) {
22 return value instanceof Primitive ? Primitive(value) : value;
25 var Primitives = function Primitives(_, value) {
26 return typeof(value) === primitive ? new Primitive(value) : value;
29 var revive = function revive(input, parsed, output, $) {
32 for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) {
34 var value = output[k];
36 if (value instanceof Primitive) {
37 var tmp = input[value];
39 if (typeof(tmp) === object && !parsed.has(tmp)) {
44 a: [input, parsed, tmp, $]
46 } else output[k] = $.call(output, k, tmp);
47 } else if (output[k] !== ignore) output[k] = $.call(output, k, value);
50 for (var _length = lazy.length, i = 0; i < _length; i++) {
51 var _lazy$i = lazy[i],
54 output[_k] = $.call(output, _k, revive.apply(null, a));
60 var set = function set(known, input, value) {
61 var index = Primitive(input.push(value) - 1);
62 known.set(value, index);
66 var parse = function parse(text, reviver) {
67 var input = $parse(text, Primitives).map(primitives);
69 var $ = reviver || noop;
70 var tmp = typeof(value) === object && value ? revive(input, new Set(), value, $) : value;
75 var stringify = function stringify(value, replacer, space) {
76 var $ = replacer && typeof(replacer) === object ? function (k, v) {
77 return k === '' || -1 < replacer.indexOf(k) ? v : void 0;
79 var known = new Map();
82 var i = +set(known, input, $.call({
87 while (i < input.length) {
89 output[i] = $stringify(input[i++], replace, space);
92 return '[' + output.join(',') + ']';
94 function replace(key, value) {
100 var after = $.call(this, key, value);
102 switch (typeof(after)) {
104 if (after === null) return after;
107 return known.get(after) || set(known, input, after);
113 var toJSON = function toJSON(any) {
114 return $parse(stringify(any));
116 var fromJSON = function fromJSON(any) {
117 return parse($stringify(any));
120 exports.fromJSON = fromJSON;
121 exports.parse = parse;
122 exports.stringify = stringify;
123 exports.toJSON = toJSON;