parse
Version:
Parse JavaScript SDK
74 lines (73 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = decode;
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 _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
};
}
function decode(value) {
if (value === null || typeof value !== 'object' || value instanceof Date) {
return value;
}
if (Array.isArray(value)) {
const dup = [];
value.forEach((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;
}