decode.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = decode;
  6. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  7. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  8. var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
  9. var _ParsePolygon = _interopRequireDefault(require("./ParsePolygon"));
  10. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  11. var _ParseOp = require("./ParseOp");
  12. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  13. function _interopRequireDefault(obj) {
  14. return obj && obj.__esModule ? obj : {
  15. default: obj
  16. };
  17. }
  18. /**
  19. * Copyright (c) 2015-present, Parse, LLC.
  20. * All rights reserved.
  21. *
  22. * This source code is licensed under the BSD-style license found in the
  23. * LICENSE file in the root directory of this source tree. An additional grant
  24. * of patent rights can be found in the PATENTS file in the same directory.
  25. *
  26. * @flow
  27. */
  28. // eslint-disable-line no-unused-vars
  29. function decode(value
  30. /*: any*/
  31. )
  32. /*: any*/
  33. {
  34. if (value === null || typeof value !== 'object') {
  35. return value;
  36. }
  37. if (Array.isArray(value)) {
  38. const dup = [];
  39. value.forEach((v, i) => {
  40. dup[i] = decode(v);
  41. });
  42. return dup;
  43. }
  44. if (typeof value.__op === 'string') {
  45. return (0, _ParseOp.opFromJSON)(value);
  46. }
  47. if (value.__type === 'Pointer' && value.className) {
  48. return _ParseObject.default.fromJSON(value);
  49. }
  50. if (value.__type === 'Object' && value.className) {
  51. return _ParseObject.default.fromJSON(value);
  52. }
  53. if (value.__type === 'Relation') {
  54. // The parent and key fields will be populated by the parent
  55. const relation = new _ParseRelation.default(null, null);
  56. relation.targetClassName = value.className;
  57. return relation;
  58. }
  59. if (value.__type === 'Date') {
  60. return new Date(value.iso);
  61. }
  62. if (value.__type === 'File') {
  63. return _ParseFile.default.fromJSON(value);
  64. }
  65. if (value.__type === 'GeoPoint') {
  66. return new _ParseGeoPoint.default({
  67. latitude: value.latitude,
  68. longitude: value.longitude
  69. });
  70. }
  71. if (value.__type === 'Polygon') {
  72. return new _ParsePolygon.default(value.coordinates);
  73. }
  74. const copy = {};
  75. for (const k in value) {
  76. copy[k] = decode(value[k]);
  77. }
  78. return copy;
  79. }