Spaces:
Running
Running
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; | |
})({}); | |