retrocycle.js
2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"use strict";
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = retrocycle;
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/es6.function.name");
require("core-js/modules/es6.array.is-array");
var _reviver = _interopRequireDefault(require("./reviver"));
var _muteProperty = _interopRequireDefault(require("./util/muteProperty"));
var _constants = require("../constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
// eslint-disable-next-line no-control-regex
var pathReg = /^\$(?:\[(?:\d+|"(?:[^\\"\u0000-\u001f]|\\([\\"/bfnrt]|u[0-9a-zA-Z]{4}))*")])*$/;
function retrocycle(json) {
var $ = JSON.parse(json, _reviver.default);
if (_typeof($) !== 'object' || $ === null) {
return $;
}
(function rez(value) {
if (value && _typeof(value) === 'object') {
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i += 1) {
var item = value[i];
if (item && _typeof(item) === 'object') {
var path = item.$ref;
if (typeof path === 'string' && pathReg.test(path)) {
value[i] = eval(path); // eslint-disable-line no-eval, no-param-reassign
} else {
rez(item);
}
}
}
} else {
// eslint-disable-next-line no-restricted-syntax, guard-for-in
for (var name in value) {
var _item = value[name];
if (_typeof(_item) === 'object' && _item !== null) {
var _path = _item.$ref;
if (typeof _path === 'string' && pathReg.test(_path)) {
value[name] = eval(_path); // eslint-disable-line no-eval, no-param-reassign
} else {
rez(_item);
}
}
}
}
}
})($);
(0, _muteProperty.default)(_constants.CYCLIC_KEY, $);
return $;
}