decode.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = decode;
  6. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  7. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  8. var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
  9. var _ParsePolygon = _interopRequireDefault(require("./ParsePolygon"));
  10. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  11. function _interopRequireDefault(e) {
  12. return e && e.__esModule ? e : {
  13. default: e
  14. };
  15. }
  16. function decode(value) {
  17. if (value === null || typeof value !== 'object' || value instanceof Date) {
  18. return value;
  19. }
  20. if (Array.isArray(value)) {
  21. const dup = [];
  22. value.forEach((v, i) => {
  23. dup[i] = decode(v);
  24. });
  25. return dup;
  26. }
  27. if (typeof value.__op === 'string') {
  28. const {
  29. opFromJSON
  30. } = _CoreManager.default.getParseOp();
  31. return opFromJSON(value);
  32. }
  33. const ParseObject = _CoreManager.default.getParseObject();
  34. if (value.__type === 'Pointer' && value.className) {
  35. return ParseObject.fromJSON(value);
  36. }
  37. if (value.__type === 'Object' && value.className) {
  38. return ParseObject.fromJSON(value);
  39. }
  40. if (value.__type === 'Relation') {
  41. // The parent and key fields will be populated by the parent
  42. const relation = new _ParseRelation.default(null, null);
  43. relation.targetClassName = value.className;
  44. return relation;
  45. }
  46. if (value.__type === 'Date') {
  47. return new Date(value.iso);
  48. }
  49. if (value.__type === 'File') {
  50. return _ParseFile.default.fromJSON(value);
  51. }
  52. if (value.__type === 'GeoPoint') {
  53. return new _ParseGeoPoint.default({
  54. latitude: value.latitude,
  55. longitude: value.longitude
  56. });
  57. }
  58. if (value.__type === 'Polygon') {
  59. return new _ParsePolygon.default(value.coordinates);
  60. }
  61. const copy = {};
  62. for (const k in value) {
  63. copy[k] = decode(value[k]);
  64. }
  65. return copy;
  66. }