parse
Version:
Parse JavaScript SDK
73 lines (72 loc) • 2.56 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = decode;
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _CoreManager = _interopRequireDefault(require("./CoreManager"));
var _ParseFile = _interopRequireDefault(require("./ParseFile"));
var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
var _ParsePolygon = _interopRequireDefault(require("./ParsePolygon"));
var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
var _isDangerousKey = require("./isDangerousKey");
function decode(value) {
if (value === null || typeof value !== 'object' || value instanceof Date) {
return value;
}
if ((0, _isArray.default)(value)) {
const dup = [];
(0, _forEach.default)(value).call(value, (v, i) => {
dup[i] = decode(v);
});
return dup;
}
if (typeof value.__op === 'string') {
const {
opFromJSON
} = _CoreManager.default.getParseOp();
return opFromJSON(value);
}
const ParseObject = _CoreManager.default.getParseObject();
if (value.__type === 'Pointer' && value.className) {
return ParseObject.fromJSON(value);
}
if (value.__type === 'Object' && value.className) {
return ParseObject.fromJSON(value);
}
if (value.__type === 'Relation') {
// The parent and key fields will be populated by the parent
const relation = new _ParseRelation.default(null, null);
relation.targetClassName = value.className;
return relation;
}
if (value.__type === 'Date') {
return new Date(value.iso);
}
if (value.__type === 'File') {
return _ParseFile.default.fromJSON(value);
}
if (value.__type === 'GeoPoint') {
return new _ParseGeoPoint.default({
latitude: value.latitude,
longitude: value.longitude
});
}
if (value.__type === 'Polygon') {
return new _ParsePolygon.default(value.coordinates);
}
const copy = {};
for (const k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
// Skip dangerous keys that could pollute prototypes
if ((0, _isDangerousKey.isDangerousKey)(k)) {
continue;
}
copy[k] = decode(value[k]);
}
}
return copy;
}